From c41e466d9ba070abd87fa255e0312c0fdda30d29 Mon Sep 17 00:00:00 2001 From: Teo Koon Peng Date: Tue, 1 Mar 2022 13:45:23 +0800 Subject: [PATCH 1/2] remove reporting Signed-off-by: Teo Koon Peng --- .github/workflows/nightly.yml | 33 - .github/workflows/reporting-e2e.yml | 41 -- .github/workflows/reporting-server.yml | 46 -- .github/workflows/reporting.yml | 47 -- Pipfile | 2 - Pipfile.lock | 219 +++---- README.md | 2 +- codecov.yml | 8 - example-deployment/README.md | 59 +- example-deployment/deploy.sh | 15 - .../docker/reporting-server.Dockerfile | 22 - .../docker/reporting.Dockerfile | 43 -- .../k8s/base/reporting-server/fluentd.yaml | 99 --- .../base/reporting-server/kustomization.yaml | 7 - .../k8s/base/reporting-server/minio.yaml | 121 ---- .../reporting-server/reporting-server.yaml | 154 ----- .../k8s/base/reporting/kustomization.yaml | 5 - .../k8s/base/reporting/reporting.yaml | 56 -- .../k8s/example-full/cronjobs.yaml | 35 - .../k8s/example-full/fluentd-configmap.yaml | 167 ----- .../k8s/example-full/kustomization.yaml | 13 - .../example-full/reporting_server_config.py | 19 - .../keycloak-tools/bootstrap-keycloak.js | 35 +- package-lock.json | 175 +---- package.json | 3 - packages/react-components/lib/index.ts | 1 - .../lib/reports/default-date-form.spec.tsx | 17 - .../lib/reports/default-dates-form.tsx | 79 --- .../lib/reports/default-report-interface.tsx | 23 - .../dispenser-state-report-table.spec.tsx | 44 -- .../dispenser-state-report-table.tsx | 69 -- .../dispenser-state-report.spec.tsx | 36 -- .../dispenser-state-report.tsx | 41 -- .../lib/reports/dispenser-state/index.ts | 2 - .../door-state-report-table.spec.tsx | 42 -- .../door-state/door-state-report-table.tsx | 68 -- .../door-state/door-state-report.spec.tsx | 36 -- .../reports/door-state/door-state-report.tsx | 41 -- .../lib/reports/door-state/index.ts | 2 - .../fleet-state-report-table.spec.tsx | 46 -- .../fleet-state/fleet-state-report-table.tsx | 106 ---- .../fleet-state/fleet-state-report.spec.tsx | 36 -- .../fleet-state/fleet-state-report.tsx | 41 -- .../lib/reports/fleet-state/index.ts | 2 - .../health/health-report-table.spec.tsx | 44 -- .../reports/health/health-report-table.tsx | 86 --- .../lib/reports/health/health-report.spec.tsx | 36 -- .../lib/reports/health/health-report.tsx | 41 -- .../lib/reports/health/index.ts | 2 - .../react-components/lib/reports/index.ts | 13 - .../lib/reports/ingestor-state/index.ts | 2 - .../ingestor-state-report-table.spec.tsx | 44 -- .../ingestor-state-report-table.tsx | 69 -- .../ingestor-state-report.spec.tsx | 36 -- .../ingestor-state/ingestor-state-report.tsx | 41 -- .../lib/reports/lift-state/index.ts | 2 - .../lift-state-report-table.spec.tsx | 47 -- .../lift-state/lift-state-report-table.tsx | 107 ---- .../lift-state/lift-state-report.spec.tsx | 36 -- .../reports/lift-state/lift-state-report.tsx | 41 -- .../custom-lookup-filter.spec.tsx | 31 - .../log-management/custom-lookup-filter.tsx | 61 -- .../lib/reports/log-management/index.ts | 4 - .../lib/reports/log-management/log-level.ts | 13 - .../log-management/log-management.spec.tsx | 35 - .../reports/log-management/log-management.tsx | 64 -- .../reports/log-management/log-table.spec.tsx | 118 ---- .../lib/reports/log-management/log-table.tsx | 176 ----- .../log-management/logging.stories.tsx | 73 --- .../reports/log-management/search-filter.tsx | 57 -- .../log-management/search-log-form.spec.tsx | 17 - .../log-management/search-log-form.tsx | 130 ---- .../lib/reports/multi-level-menu.spec.tsx | 80 --- .../lib/reports/multi-level-menu.stories.tsx | 55 -- .../lib/reports/multi-level-menu.tsx | 113 ---- .../lib/reports/task-summary/index.ts | 2 - .../task-summary-report-table.spec.tsx | 48 -- .../task-summary-report-table.tsx | 126 ---- .../task-summary/task-summary-report.spec.tsx | 38 -- .../task-summary/task-summary-report.tsx | 41 -- .../lib/reports/task-summary/utils.tsx | 33 - .../lib/reports/user-report/index.ts | 6 - .../user-login-failure-report-table.tsx | 83 --- .../user-report/user-login-failure-report.tsx | 44 -- .../user-report/user-login-report-table.tsx | 87 --- .../reports/user-report/user-login-report.tsx | 41 -- .../user-report/user-logout-report-table.tsx | 78 --- .../user-report/user-logout-report.tsx | 41 -- .../lib/reports/utils.spec.ts | 138 ---- .../react-components/lib/reports/utils.ts | 6 - packages/react-components/lib/tasks/utils.ts | 5 +- packages/reporting-e2e/.eslintrc.js | 6 - packages/reporting-e2e/.gitignore | 3 - packages/reporting-e2e/README.md | 77 --- .../docs/resources/reporting-e2e-process.png | Bin 24265 -> 0 bytes packages/reporting-e2e/package.json | 26 - .../scripts/start-reporting-server.sh | 6 - packages/reporting-e2e/scripts/test-e2e.js | 48 -- packages/reporting-e2e/tests/1-logs.test.ts | 24 - .../reporting-e2e/tests/2-reporting.test.ts | 95 --- packages/reporting-e2e/tests/mock-data.ts | 147 ----- packages/reporting-e2e/tests/utils.ts | 85 --- packages/reporting-e2e/tsconfig.json | 66 -- packages/reporting-e2e/wdio.conf.js | 291 --------- packages/reporting-server/.coverage | Bin 53248 -> 0 bytes packages/reporting-server/.coveragerc | 7 - packages/reporting-server/.gitignore | 9 - packages/reporting-server/.pylintrc | 600 ------------------ packages/reporting-server/LICENSE | 201 ------ packages/reporting-server/README.md | 122 ---- .../reporting-server/dependencies/__init__.py | 2 - .../reporting-server/dependencies/auth.py | 53 -- .../reporting-server/dependencies/logging.py | 13 - .../models/pydantic_models.py | 33 - .../models/tortoise_models/__init__.py | 13 - .../models/tortoise_models/auth_events.py | 16 - .../models/tortoise_models/container.py | 6 - .../models/tortoise_models/dispenser_state.py | 28 - .../models/tortoise_models/door.py | 6 - .../models/tortoise_models/door_state.py | 38 -- .../models/tortoise_models/fleet.py | 10 - .../models/tortoise_models/fleet_state.py | 57 -- .../models/tortoise_models/health.py | 36 -- .../models/tortoise_models/ingestor_state.py | 30 - .../models/tortoise_models/lift.py | 6 - .../models/tortoise_models/lift_state.py | 82 --- .../models/tortoise_models/raw_log.py | 25 - .../models/tortoise_models/task_summary.py | 128 ---- .../models/tortoise_models/user.py | 11 - packages/reporting-server/package.json | 17 - packages/reporting-server/parsers/__init__.py | 0 .../parsers/auth_event_parser.py | 16 - .../parsers/dispenser_state_parser.py | 13 - .../parsers/doors_state_parser.py | 15 - .../parsers/fleet_state_parser.py | 31 - .../reporting-server/parsers/health_parser.py | 17 - .../parsers/ingestor_state_parser.py | 13 - .../parsers/lift_state_parser.py | 37 -- .../parsers/log_type_parser.py | 19 - .../parsers/task_summary_parser.py | 27 - .../parsers/test_auth_event_parser.py | 21 - .../parsers/test_dispenser_state_parser.py | 20 - .../parsers/test_doors_state_parser.py | 16 - .../parsers/test_fleet_state_parser.py | 44 -- .../parsers/test_health_parser.py | 17 - .../parsers/test_ingestor_parser.py | 18 - .../parsers/test_lift_state_parser.py | 38 -- .../parsers/test_log_type_parser.py | 37 -- .../parsers/test_task_summary_parser.py | 40 -- .../reporting-server/rest_server/__init__.py | 0 .../reporting-server/rest_server/__main__.py | 47 -- .../rest_server/__mocks__/__init__.py | 0 .../rest_server/__mocks__/parsed_data.py | 23 - .../rest_server/__mocks__/raw_data.py | 67 -- packages/reporting-server/rest_server/app.py | 53 -- .../rest_server/app_config.py | 46 -- .../rest_server/authenticator.py | 30 - .../rest_server/clean_logs.py | 85 --- .../reporting-server/rest_server/database.py | 18 - .../rest_server/default_config.py | 30 - .../rest_server/repositories/__init__.py | 0 .../repositories/log_creation_handler.py | 101 --- .../repositories/parser_dispatcher.py | 103 --- .../repositories/report/__init__.py | 13 - .../repositories/report/auth_event_report.py | 59 -- .../repositories/report/dispenser_state.py | 18 - .../repositories/report/door_state.py | 25 - .../repositories/report/fleet_state.py | 25 - .../rest_server/repositories/report/health.py | 24 - .../repositories/report/ingestor_state.py | 18 - .../repositories/report/lift_state.py | 25 - .../repositories/report/raw_log.py | 49 -- .../repositories/report/task_summary.py | 25 - .../report/test_auth_event_report.py | 75 --- .../report/test_dispenser_state.py | 35 - .../repositories/report/test_door_state.py | 31 - .../repositories/report/test_fleet_state.py | 48 -- .../repositories/report/test_health.py | 36 -- .../report/test_ingestor_state.py | 35 - .../repositories/report/test_lift_state.py | 55 -- .../repositories/report/test_raw_log.py | 45 -- .../repositories/report/test_utils.py | 39 -- .../rest_server/repositories/report/utils.py | 23 - .../repositories/rmf_log_creation_handler.py | 28 - .../repositories/test_log_creation_handler.py | 75 --- .../repositories/test_parser_dispatcher.py | 120 ---- .../test_rmf_log_creation_handler.py | 54 -- .../rest_server/routers/__init__.py | 2 - .../rest_server/routers/log.py | 50 -- .../rest_server/routers/report.py | 187 ------ .../rest_server/routers/test_log.py | 109 ---- .../rest_server/routers/test_report.py | 28 - .../rest_server/test_utils.py | 9 - packages/reporting-server/setup.py | 39 -- packages/reporting/.env | 5 - packages/reporting/.gitignore | 32 - packages/reporting/.storybook/main.js | 8 - packages/reporting/package.json | 79 --- .../aron-visuals-3jBU9TbKW7o-unsplash.jpg | Bin 972473 -> 0 bytes .../reporting/public/assets/ros-health.png | Bin 8220 -> 0 bytes .../reporting/public/fast_forward-24px.svg | 1 - .../reporting/public/fast_rewind-24px.svg | 1 - packages/reporting/public/favicon.ico | Bin 9294 -> 0 bytes packages/reporting/public/index.html | 44 -- packages/reporting/public/logo192.png | Bin 8581 -> 0 bytes packages/reporting/public/logo512.png | Bin 22920 -> 0 bytes packages/reporting/public/manifest.json | 25 - packages/reporting/public/pause-24px.svg | 1 - packages/reporting/public/play_arrow-24px.svg | 1 - packages/reporting/public/robots.txt | 2 - .../reporting/public/silent-check-sso.html | 7 - packages/reporting/src/app-config.ts | 39 -- .../reporting/src/components/app-contexts.tsx | 4 - packages/reporting/src/components/app.tsx | 84 --- .../src/components/auth-contexts.tsx | 5 - .../auth/__mocks__/fake-authenticator.ts | 31 - .../reporting/src/components/dashboard.tsx | 13 - .../src/components/page-not-found.tsx | 64 -- .../src/components/report-dashboard.tsx | 299 --------- .../reporting/src/components/report-list.tsx | 20 - .../reporter-side-bar-structure.tsx | 89 --- .../components/reports/all-logs-report.tsx | 57 -- .../reports/dispenser-state-report.tsx | 25 - .../components/reports/door-state-report.tsx | 21 - .../components/reports/fleet-state-report.tsx | 21 - .../src/components/reports/health-report.tsx | 21 - .../reports/ingestor-state-report.tsx | 25 - .../components/reports/lift-state-report.tsx | 21 - .../reports/task-summary-report.tsx | 25 - .../reports/user-login-failure-report.tsx | 25 - .../components/reports/user-login-report.tsx | 21 - .../components/reports/user-logout-report.tsx | 21 - .../reporting/src/components/reports/utils.ts | 26 - .../components/tests/page-not-found.test.tsx | 16 - packages/reporting/src/index.tsx | 16 - packages/reporting/src/react-app-env.d.ts | 1 - packages/reporting/src/serviceWorker.ts | 139 ---- packages/reporting/src/setupTests.ts | 7 - .../reports/reporter-side-bar.stories.tsx | 12 - .../src/tests/components/app.test.tsx | 7 - .../components/report-dashboard.test.tsx | 41 -- packages/reporting/src/util/url.ts | 6 - packages/reporting/tsconfig.json | 26 - .../build/lib/ros_translator}/__init__.py | 0 .../build/lib/ros_translator/__main__.py | 38 ++ .../build/lib/ros_translator/library.py | 217 +++++++ .../lib/ros_translator/pydantic/__init__.py | 142 +++++ .../build/lib/ros_translator/pydantic/msg.j2 | 30 + .../build/lib/ros_translator/ros_types.py | 17 + .../lib/ros_translator/typescript/__init__.py | 179 ++++++ .../typescript/templates/index.j2 | 5 + .../typescript/templates/srv-ts-definition.j2 | 10 + .../typescript/templates/ts-definition.j2 | 97 +++ scripts/generate-pylintrc.js | 5 +- 254 files changed, 833 insertions(+), 10859 deletions(-) delete mode 100644 .github/workflows/reporting-e2e.yml delete mode 100644 .github/workflows/reporting-server.yml delete mode 100644 .github/workflows/reporting.yml delete mode 100644 example-deployment/docker/reporting-server.Dockerfile delete mode 100644 example-deployment/docker/reporting.Dockerfile delete mode 100644 example-deployment/k8s/base/reporting-server/fluentd.yaml delete mode 100644 example-deployment/k8s/base/reporting-server/kustomization.yaml delete mode 100644 example-deployment/k8s/base/reporting-server/minio.yaml delete mode 100644 example-deployment/k8s/base/reporting-server/reporting-server.yaml delete mode 100644 example-deployment/k8s/base/reporting/kustomization.yaml delete mode 100644 example-deployment/k8s/base/reporting/reporting.yaml delete mode 100644 example-deployment/k8s/example-full/cronjobs.yaml delete mode 100644 example-deployment/k8s/example-full/fluentd-configmap.yaml delete mode 100644 example-deployment/k8s/example-full/reporting_server_config.py delete mode 100644 packages/react-components/lib/reports/default-date-form.spec.tsx delete mode 100644 packages/react-components/lib/reports/default-dates-form.tsx delete mode 100644 packages/react-components/lib/reports/default-report-interface.tsx delete mode 100644 packages/react-components/lib/reports/dispenser-state/dispenser-state-report-table.spec.tsx delete mode 100644 packages/react-components/lib/reports/dispenser-state/dispenser-state-report-table.tsx delete mode 100644 packages/react-components/lib/reports/dispenser-state/dispenser-state-report.spec.tsx delete mode 100644 packages/react-components/lib/reports/dispenser-state/dispenser-state-report.tsx delete mode 100644 packages/react-components/lib/reports/dispenser-state/index.ts delete mode 100644 packages/react-components/lib/reports/door-state/door-state-report-table.spec.tsx delete mode 100644 packages/react-components/lib/reports/door-state/door-state-report-table.tsx delete mode 100644 packages/react-components/lib/reports/door-state/door-state-report.spec.tsx delete mode 100644 packages/react-components/lib/reports/door-state/door-state-report.tsx delete mode 100644 packages/react-components/lib/reports/door-state/index.ts delete mode 100644 packages/react-components/lib/reports/fleet-state/fleet-state-report-table.spec.tsx delete mode 100644 packages/react-components/lib/reports/fleet-state/fleet-state-report-table.tsx delete mode 100644 packages/react-components/lib/reports/fleet-state/fleet-state-report.spec.tsx delete mode 100644 packages/react-components/lib/reports/fleet-state/fleet-state-report.tsx delete mode 100644 packages/react-components/lib/reports/fleet-state/index.ts delete mode 100644 packages/react-components/lib/reports/health/health-report-table.spec.tsx delete mode 100644 packages/react-components/lib/reports/health/health-report-table.tsx delete mode 100644 packages/react-components/lib/reports/health/health-report.spec.tsx delete mode 100644 packages/react-components/lib/reports/health/health-report.tsx delete mode 100644 packages/react-components/lib/reports/health/index.ts delete mode 100644 packages/react-components/lib/reports/index.ts delete mode 100644 packages/react-components/lib/reports/ingestor-state/index.ts delete mode 100644 packages/react-components/lib/reports/ingestor-state/ingestor-state-report-table.spec.tsx delete mode 100644 packages/react-components/lib/reports/ingestor-state/ingestor-state-report-table.tsx delete mode 100644 packages/react-components/lib/reports/ingestor-state/ingestor-state-report.spec.tsx delete mode 100644 packages/react-components/lib/reports/ingestor-state/ingestor-state-report.tsx delete mode 100644 packages/react-components/lib/reports/lift-state/index.ts delete mode 100644 packages/react-components/lib/reports/lift-state/lift-state-report-table.spec.tsx delete mode 100644 packages/react-components/lib/reports/lift-state/lift-state-report-table.tsx delete mode 100644 packages/react-components/lib/reports/lift-state/lift-state-report.spec.tsx delete mode 100644 packages/react-components/lib/reports/lift-state/lift-state-report.tsx delete mode 100644 packages/react-components/lib/reports/log-management/custom-lookup-filter.spec.tsx delete mode 100644 packages/react-components/lib/reports/log-management/custom-lookup-filter.tsx delete mode 100644 packages/react-components/lib/reports/log-management/index.ts delete mode 100644 packages/react-components/lib/reports/log-management/log-level.ts delete mode 100644 packages/react-components/lib/reports/log-management/log-management.spec.tsx delete mode 100644 packages/react-components/lib/reports/log-management/log-management.tsx delete mode 100644 packages/react-components/lib/reports/log-management/log-table.spec.tsx delete mode 100644 packages/react-components/lib/reports/log-management/log-table.tsx delete mode 100644 packages/react-components/lib/reports/log-management/logging.stories.tsx delete mode 100644 packages/react-components/lib/reports/log-management/search-filter.tsx delete mode 100644 packages/react-components/lib/reports/log-management/search-log-form.spec.tsx delete mode 100644 packages/react-components/lib/reports/log-management/search-log-form.tsx delete mode 100644 packages/react-components/lib/reports/multi-level-menu.spec.tsx delete mode 100644 packages/react-components/lib/reports/multi-level-menu.stories.tsx delete mode 100644 packages/react-components/lib/reports/multi-level-menu.tsx delete mode 100644 packages/react-components/lib/reports/task-summary/index.ts delete mode 100644 packages/react-components/lib/reports/task-summary/task-summary-report-table.spec.tsx delete mode 100644 packages/react-components/lib/reports/task-summary/task-summary-report-table.tsx delete mode 100644 packages/react-components/lib/reports/task-summary/task-summary-report.spec.tsx delete mode 100644 packages/react-components/lib/reports/task-summary/task-summary-report.tsx delete mode 100644 packages/react-components/lib/reports/task-summary/utils.tsx delete mode 100644 packages/react-components/lib/reports/user-report/index.ts delete mode 100644 packages/react-components/lib/reports/user-report/user-login-failure-report-table.tsx delete mode 100644 packages/react-components/lib/reports/user-report/user-login-failure-report.tsx delete mode 100644 packages/react-components/lib/reports/user-report/user-login-report-table.tsx delete mode 100644 packages/react-components/lib/reports/user-report/user-login-report.tsx delete mode 100644 packages/react-components/lib/reports/user-report/user-logout-report-table.tsx delete mode 100644 packages/react-components/lib/reports/user-report/user-logout-report.tsx delete mode 100644 packages/react-components/lib/reports/utils.spec.ts delete mode 100644 packages/react-components/lib/reports/utils.ts delete mode 100644 packages/reporting-e2e/.eslintrc.js delete mode 100644 packages/reporting-e2e/.gitignore delete mode 100644 packages/reporting-e2e/README.md delete mode 100644 packages/reporting-e2e/docs/resources/reporting-e2e-process.png delete mode 100644 packages/reporting-e2e/package.json delete mode 100755 packages/reporting-e2e/scripts/start-reporting-server.sh delete mode 100644 packages/reporting-e2e/scripts/test-e2e.js delete mode 100644 packages/reporting-e2e/tests/1-logs.test.ts delete mode 100644 packages/reporting-e2e/tests/2-reporting.test.ts delete mode 100644 packages/reporting-e2e/tests/mock-data.ts delete mode 100644 packages/reporting-e2e/tests/utils.ts delete mode 100644 packages/reporting-e2e/tsconfig.json delete mode 100644 packages/reporting-e2e/wdio.conf.js delete mode 100644 packages/reporting-server/.coverage delete mode 100644 packages/reporting-server/.coveragerc delete mode 100644 packages/reporting-server/.gitignore delete mode 100644 packages/reporting-server/.pylintrc delete mode 100644 packages/reporting-server/LICENSE delete mode 100644 packages/reporting-server/README.md delete mode 100644 packages/reporting-server/dependencies/__init__.py delete mode 100644 packages/reporting-server/dependencies/auth.py delete mode 100644 packages/reporting-server/dependencies/logging.py delete mode 100644 packages/reporting-server/models/pydantic_models.py delete mode 100644 packages/reporting-server/models/tortoise_models/__init__.py delete mode 100644 packages/reporting-server/models/tortoise_models/auth_events.py delete mode 100644 packages/reporting-server/models/tortoise_models/container.py delete mode 100644 packages/reporting-server/models/tortoise_models/dispenser_state.py delete mode 100644 packages/reporting-server/models/tortoise_models/door.py delete mode 100644 packages/reporting-server/models/tortoise_models/door_state.py delete mode 100644 packages/reporting-server/models/tortoise_models/fleet.py delete mode 100644 packages/reporting-server/models/tortoise_models/fleet_state.py delete mode 100644 packages/reporting-server/models/tortoise_models/health.py delete mode 100644 packages/reporting-server/models/tortoise_models/ingestor_state.py delete mode 100644 packages/reporting-server/models/tortoise_models/lift.py delete mode 100644 packages/reporting-server/models/tortoise_models/lift_state.py delete mode 100644 packages/reporting-server/models/tortoise_models/raw_log.py delete mode 100644 packages/reporting-server/models/tortoise_models/task_summary.py delete mode 100644 packages/reporting-server/models/tortoise_models/user.py delete mode 100644 packages/reporting-server/package.json delete mode 100644 packages/reporting-server/parsers/__init__.py delete mode 100644 packages/reporting-server/parsers/auth_event_parser.py delete mode 100644 packages/reporting-server/parsers/dispenser_state_parser.py delete mode 100644 packages/reporting-server/parsers/doors_state_parser.py delete mode 100644 packages/reporting-server/parsers/fleet_state_parser.py delete mode 100644 packages/reporting-server/parsers/health_parser.py delete mode 100644 packages/reporting-server/parsers/ingestor_state_parser.py delete mode 100644 packages/reporting-server/parsers/lift_state_parser.py delete mode 100644 packages/reporting-server/parsers/log_type_parser.py delete mode 100644 packages/reporting-server/parsers/task_summary_parser.py delete mode 100644 packages/reporting-server/parsers/test_auth_event_parser.py delete mode 100644 packages/reporting-server/parsers/test_dispenser_state_parser.py delete mode 100644 packages/reporting-server/parsers/test_doors_state_parser.py delete mode 100644 packages/reporting-server/parsers/test_fleet_state_parser.py delete mode 100644 packages/reporting-server/parsers/test_health_parser.py delete mode 100644 packages/reporting-server/parsers/test_ingestor_parser.py delete mode 100644 packages/reporting-server/parsers/test_lift_state_parser.py delete mode 100644 packages/reporting-server/parsers/test_log_type_parser.py delete mode 100644 packages/reporting-server/parsers/test_task_summary_parser.py delete mode 100644 packages/reporting-server/rest_server/__init__.py delete mode 100644 packages/reporting-server/rest_server/__main__.py delete mode 100644 packages/reporting-server/rest_server/__mocks__/__init__.py delete mode 100644 packages/reporting-server/rest_server/__mocks__/parsed_data.py delete mode 100644 packages/reporting-server/rest_server/__mocks__/raw_data.py delete mode 100644 packages/reporting-server/rest_server/app.py delete mode 100644 packages/reporting-server/rest_server/app_config.py delete mode 100644 packages/reporting-server/rest_server/authenticator.py delete mode 100644 packages/reporting-server/rest_server/clean_logs.py delete mode 100644 packages/reporting-server/rest_server/database.py delete mode 100644 packages/reporting-server/rest_server/default_config.py delete mode 100644 packages/reporting-server/rest_server/repositories/__init__.py delete mode 100644 packages/reporting-server/rest_server/repositories/log_creation_handler.py delete mode 100644 packages/reporting-server/rest_server/repositories/parser_dispatcher.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/__init__.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/auth_event_report.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/dispenser_state.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/door_state.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/fleet_state.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/health.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/ingestor_state.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/lift_state.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/raw_log.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/task_summary.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/test_auth_event_report.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/test_dispenser_state.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/test_door_state.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/test_fleet_state.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/test_health.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/test_ingestor_state.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/test_lift_state.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/test_raw_log.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/test_utils.py delete mode 100644 packages/reporting-server/rest_server/repositories/report/utils.py delete mode 100644 packages/reporting-server/rest_server/repositories/rmf_log_creation_handler.py delete mode 100644 packages/reporting-server/rest_server/repositories/test_log_creation_handler.py delete mode 100644 packages/reporting-server/rest_server/repositories/test_parser_dispatcher.py delete mode 100644 packages/reporting-server/rest_server/repositories/test_rmf_log_creation_handler.py delete mode 100644 packages/reporting-server/rest_server/routers/__init__.py delete mode 100644 packages/reporting-server/rest_server/routers/log.py delete mode 100644 packages/reporting-server/rest_server/routers/report.py delete mode 100644 packages/reporting-server/rest_server/routers/test_log.py delete mode 100644 packages/reporting-server/rest_server/routers/test_report.py delete mode 100644 packages/reporting-server/rest_server/test_utils.py delete mode 100644 packages/reporting-server/setup.py delete mode 100644 packages/reporting/.env delete mode 100644 packages/reporting/.gitignore delete mode 100644 packages/reporting/.storybook/main.js delete mode 100644 packages/reporting/package.json delete mode 100644 packages/reporting/public/assets/aron-visuals-3jBU9TbKW7o-unsplash.jpg delete mode 100644 packages/reporting/public/assets/ros-health.png delete mode 100644 packages/reporting/public/fast_forward-24px.svg delete mode 100644 packages/reporting/public/fast_rewind-24px.svg delete mode 100644 packages/reporting/public/favicon.ico delete mode 100644 packages/reporting/public/index.html delete mode 100644 packages/reporting/public/logo192.png delete mode 100644 packages/reporting/public/logo512.png delete mode 100644 packages/reporting/public/manifest.json delete mode 100644 packages/reporting/public/pause-24px.svg delete mode 100644 packages/reporting/public/play_arrow-24px.svg delete mode 100644 packages/reporting/public/robots.txt delete mode 100644 packages/reporting/public/silent-check-sso.html delete mode 100644 packages/reporting/src/app-config.ts delete mode 100644 packages/reporting/src/components/app-contexts.tsx delete mode 100644 packages/reporting/src/components/app.tsx delete mode 100644 packages/reporting/src/components/auth-contexts.tsx delete mode 100644 packages/reporting/src/components/auth/__mocks__/fake-authenticator.ts delete mode 100644 packages/reporting/src/components/dashboard.tsx delete mode 100644 packages/reporting/src/components/page-not-found.tsx delete mode 100644 packages/reporting/src/components/report-dashboard.tsx delete mode 100644 packages/reporting/src/components/report-list.tsx delete mode 100644 packages/reporting/src/components/reporter-side-bar-structure.tsx delete mode 100644 packages/reporting/src/components/reports/all-logs-report.tsx delete mode 100644 packages/reporting/src/components/reports/dispenser-state-report.tsx delete mode 100644 packages/reporting/src/components/reports/door-state-report.tsx delete mode 100644 packages/reporting/src/components/reports/fleet-state-report.tsx delete mode 100644 packages/reporting/src/components/reports/health-report.tsx delete mode 100644 packages/reporting/src/components/reports/ingestor-state-report.tsx delete mode 100644 packages/reporting/src/components/reports/lift-state-report.tsx delete mode 100644 packages/reporting/src/components/reports/task-summary-report.tsx delete mode 100644 packages/reporting/src/components/reports/user-login-failure-report.tsx delete mode 100644 packages/reporting/src/components/reports/user-login-report.tsx delete mode 100644 packages/reporting/src/components/reports/user-logout-report.tsx delete mode 100644 packages/reporting/src/components/reports/utils.ts delete mode 100644 packages/reporting/src/components/tests/page-not-found.test.tsx delete mode 100644 packages/reporting/src/index.tsx delete mode 100644 packages/reporting/src/react-app-env.d.ts delete mode 100644 packages/reporting/src/serviceWorker.ts delete mode 100644 packages/reporting/src/setupTests.ts delete mode 100644 packages/reporting/src/stories/reports/reporter-side-bar.stories.tsx delete mode 100644 packages/reporting/src/tests/components/app.test.tsx delete mode 100644 packages/reporting/src/tests/components/report-dashboard.test.tsx delete mode 100644 packages/reporting/src/util/url.ts delete mode 100644 packages/reporting/tsconfig.json rename packages/{reporting-server/models => ros-translator/build/lib/ros_translator}/__init__.py (100%) create mode 100644 packages/ros-translator/build/lib/ros_translator/__main__.py create mode 100644 packages/ros-translator/build/lib/ros_translator/library.py create mode 100644 packages/ros-translator/build/lib/ros_translator/pydantic/__init__.py create mode 100644 packages/ros-translator/build/lib/ros_translator/pydantic/msg.j2 create mode 100644 packages/ros-translator/build/lib/ros_translator/ros_types.py create mode 100644 packages/ros-translator/build/lib/ros_translator/typescript/__init__.py create mode 100644 packages/ros-translator/build/lib/ros_translator/typescript/templates/index.j2 create mode 100644 packages/ros-translator/build/lib/ros_translator/typescript/templates/srv-ts-definition.j2 create mode 100644 packages/ros-translator/build/lib/ros_translator/typescript/templates/ts-definition.j2 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index b4a08f08e..47d48060e 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -54,36 +54,3 @@ jobs: with: name: artifacts path: packages/dashboard-e2e/artifacts - reporting-e2e: - needs: build-docker-images - name: Reporting e2e - runs-on: ubuntu-latest - container: - image: ghcr.io/${{ github.repository }}/e2e - credentials: - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - options: --privileged --ipc=host - defaults: - run: - shell: bash - working-directory: packages/reporting-e2e - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: '14' - cache: 'npm' - - name: bootstrap - run: | - npm install -g npm@latest - scripts/bootstrap.sh reporting-e2e - working-directory: . - - name: test - run: npm test - - name: upload artifacts - uses: actions/upload-artifact@v2 - if: always() - with: - name: artifacts - path: packages/reporting-e2e/artifacts diff --git a/.github/workflows/reporting-e2e.yml b/.github/workflows/reporting-e2e.yml deleted file mode 100644 index 6be4b57fe..000000000 --- a/.github/workflows/reporting-e2e.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Reporting End-to-End -on: - pull_request: - push: - branches: - - main -env: - CI: true -jobs: - reporting-e2e: - name: Reporting e2e - runs-on: ubuntu-latest - container: - image: ghcr.io/${{ github.repository }}/e2e - credentials: - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - options: --privileged --ipc=host - defaults: - run: - shell: bash - working-directory: packages/reporting-e2e - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: '14' - cache: 'npm' - - name: bootstrap - run: | - npm install -g npm@latest - scripts/bootstrap.sh reporting-e2e - working-directory: . - - name: test - run: npm test - - name: upload artifacts - uses: actions/upload-artifact@v2 - if: always() - with: - name: artifacts - path: packages/reporting-e2e/artifacts diff --git a/.github/workflows/reporting-server.yml b/.github/workflows/reporting-server.yml deleted file mode 100644 index 3ed14949d..000000000 --- a/.github/workflows/reporting-server.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: reporting-server -on: - pull_request: - paths: - - '.github/workflows/reporting-server.yml' - - 'packages/reporting-server/**' - push: - branches: - - main -env: - CI: true -jobs: - tests: - name: Tests - runs-on: ubuntu-latest - container: - image: ghcr.io/${{ github.repository }}/e2e - credentials: - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - defaults: - run: - shell: bash - working-directory: packages/reporting-server - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: '14' - cache: 'npm' - - name: bootstrap - run: | - . /rmf_demos_ws/install/setup.bash - npm install -g npm@latest - scripts/bootstrap.sh reporting-server - working-directory: . - - name: tests - run: | - . /rmf_demos_ws/install/setup.bash - npm run lint - npm run test:cov - python3 -m pipenv run python -m coverage xml - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v1 - with: - flags: reporting-server diff --git a/.github/workflows/reporting.yml b/.github/workflows/reporting.yml deleted file mode 100644 index 3aa3ec6e6..000000000 --- a/.github/workflows/reporting.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: reporting -on: - pull_request: - paths: - - '.github/workflows/reporting.yml' - - 'packages/reporting/**' - - 'packages/react-components/**' - - 'packages/rmf-auth/**' - - 'packages/rmf-models/**' - push: - branches: - - main -env: - CI: true -jobs: - unit-tests: - name: Unit Tests - runs-on: ubuntu-latest - container: - image: ghcr.io/${{ github.repository }}/e2e - credentials: - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - defaults: - run: - shell: bash - working-directory: packages/reporting - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: '14' - cache: 'npm' - - name: bootstrap - run: | - . /rmf_demos_ws/install/setup.bash - npm install -g npm@latest - scripts/bootstrap.sh reporting - working-directory: . - - name: build - run: npm run build:storybook && npm run build - - name: unit test - run: npm run test:coverage - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v1 - with: - flags: reporting diff --git a/Pipfile b/Pipfile index 774c35762..ecf512073 100644 --- a/Pipfile +++ b/Pipfile @@ -15,8 +15,6 @@ api-server = {editable = true, path = "./packages/api-server"} requests = "~=2.25" asyncpg = "~=0.24.0" websocket-client = "~=1.2.3" -# reporting-server -reporting-server = {editable = true, path = "./packages/reporting-server"} # ros-translator ros-translator = {editable = true, path = "./packages/ros-translator"} diff --git a/Pipfile.lock b/Pipfile.lock index 3d8ba43c2..b69b9954f 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "f9cbd766b56afdd8ff5cda7fe2e4e9c3f896dc3a878e7dd807f8debe919905d1" + "sha256": "46ea379ca21c6c642e6387b01933657b8d12a9abebf07c977989b2b3c23c9696" }, "pipfile-spec": 6, "requires": { @@ -29,7 +29,7 @@ "sha256:6c49dc6d3405929b1d08eeccc72306d3677503cc5e5e43771efc1e00232e8231", "sha256:f0e6acc24bc4864149267ac82fb46dfb3be4455f99fe21df82609cc6e6baee51" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==0.17.0" }, "api-server": { @@ -68,7 +68,7 @@ "sha256:3ac67daa353ecf853a1df9d3e924f005e729227a60a8dbada31a4c31aba7f654", "sha256:42c84ffbe6f8de898af6073b4be9ea7ccedcd78d3474aa844c54e49d5a079f6f" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==0.21.4" }, "black": { @@ -143,11 +143,11 @@ }, "charset-normalizer": { "hashes": [ - "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721", - "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c" + "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", + "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" ], "markers": "python_version >= '3'", - "version": "==2.0.9" + "version": "==2.0.12" }, "click": { "hashes": [ @@ -245,16 +245,16 @@ "sha256:6ea2286e439c4ced7cce2b2862c25859601bf327a515c12dd6e431ef5d49d12f", "sha256:d3e3c0ac35110efb22ee3ed28201cf32f9d11a9a0e52d7dd676cad25f5219523" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==0.65.3" }, "h11": { "hashes": [ - "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6", - "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042" + "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06", + "sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442" ], - "markers": "python_version >= '3.6'", - "version": "==0.12.0" + "markers": "python_full_version >= '3.6.0'", + "version": "==0.13.0" }, "httptools": { "hashes": [ @@ -347,83 +347,54 @@ "sha256:fccdf7c2c5821a8cbd0a9440a456f5050492f2270bd54e94360cac663398739b", "sha256:fd45683c3caddf83abbb1249b653a266e7069a09f486daa8863fb0e7496a9fdb" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==1.7.1" }, "markupsafe": { "hashes": [ - "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298", - "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64", - "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b", - "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194", - "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567", - "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff", - "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724", - "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74", - "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646", - "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35", - "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6", - "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a", - "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6", - "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad", - "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26", - "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38", - "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac", - "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7", - "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6", - "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047", - "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75", - "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f", - "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b", - "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135", - "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8", - "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a", - "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a", - "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1", - "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9", - "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864", - "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914", - "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee", - "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f", - "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18", - "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8", - "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2", - "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d", - "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b", - "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b", - "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86", - "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6", - "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f", - "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb", - "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833", - "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28", - "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e", - "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415", - "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902", - "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f", - "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d", - "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9", - "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d", - "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145", - "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066", - "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c", - "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1", - "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a", - "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207", - "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f", - "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53", - "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd", - "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134", - "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85", - "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9", - "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5", - "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94", - "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509", - "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51", - "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872" - ], - "markers": "python_version >= '3.6'", - "version": "==2.0.1" + "sha256:023af8c54fe63530545f70dd2a2a7eed18d07a9a77b94e8bf1e2ff7f252db9a3", + "sha256:09c86c9643cceb1d87ca08cdc30160d1b7ab49a8a21564868921959bd16441b8", + "sha256:142119fb14a1ef6d758912b25c4e803c3ff66920635c44078666fe7cc3f8f759", + "sha256:1d1fb9b2eec3c9714dd936860850300b51dbaa37404209c8d4cb66547884b7ed", + "sha256:204730fd5fe2fe3b1e9ccadb2bd18ba8712b111dcabce185af0b3b5285a7c989", + "sha256:24c3be29abb6b34052fd26fc7a8e0a49b1ee9d282e3665e8ad09a0a68faee5b3", + "sha256:290b02bab3c9e216da57c1d11d2ba73a9f73a614bbdcc027d299a60cdfabb11a", + "sha256:3028252424c72b2602a323f70fbf50aa80a5d3aa616ea6add4ba21ae9cc9da4c", + "sha256:30c653fde75a6e5eb814d2a0a89378f83d1d3f502ab710904ee585c38888816c", + "sha256:3cace1837bc84e63b3fd2dfce37f08f8c18aeb81ef5cf6bb9b51f625cb4e6cd8", + "sha256:4056f752015dfa9828dce3140dbadd543b555afb3252507348c493def166d454", + "sha256:454ffc1cbb75227d15667c09f164a0099159da0c1f3d2636aa648f12675491ad", + "sha256:598b65d74615c021423bd45c2bc5e9b59539c875a9bdb7e5f2a6b92dfcfc268d", + "sha256:599941da468f2cf22bf90a84f6e2a65524e87be2fce844f96f2dd9a6c9d1e635", + "sha256:5ddea4c352a488b5e1069069f2f501006b1a4362cb906bee9a193ef1245a7a61", + "sha256:62c0285e91414f5c8f621a17b69fc0088394ccdaa961ef469e833dbff64bd5ea", + "sha256:679cbb78914ab212c49c67ba2c7396dc599a8479de51b9a87b174700abd9ea49", + "sha256:6e104c0c2b4cd765b4e83909cde7ec61a1e313f8a75775897db321450e928cce", + "sha256:736895a020e31b428b3382a7887bfea96102c529530299f426bf2e636aacec9e", + "sha256:75bb36f134883fdbe13d8e63b8675f5f12b80bb6627f7714c7d6c5becf22719f", + "sha256:7d2f5d97fcbd004c03df8d8fe2b973fe2b14e7bfeb2cfa012eaa8759ce9a762f", + "sha256:80beaf63ddfbc64a0452b841d8036ca0611e049650e20afcb882f5d3c266d65f", + "sha256:84ad5e29bf8bab3ad70fd707d3c05524862bddc54dc040982b0dbcff36481de7", + "sha256:8da5924cb1f9064589767b0f3fc39d03e3d0fb5aa29e0cb21d43106519bd624a", + "sha256:961eb86e5be7d0973789f30ebcf6caab60b844203f4396ece27310295a6082c7", + "sha256:96de1932237abe0a13ba68b63e94113678c379dca45afa040a17b6e1ad7ed076", + "sha256:a0a0abef2ca47b33fb615b491ce31b055ef2430de52c5b3fb19a4042dbc5cadb", + "sha256:b2a5a856019d2833c56a3dcac1b80fe795c95f401818ea963594b345929dffa7", + "sha256:b8811d48078d1cf2a6863dafb896e68406c5f513048451cd2ded0473133473c7", + "sha256:c532d5ab79be0199fa2658e24a02fce8542df196e60665dd322409a03db6a52c", + "sha256:d3b64c65328cb4cd252c94f83e66e3d7acf8891e60ebf588d7b493a55a1dbf26", + "sha256:d4e702eea4a2903441f2735799d217f4ac1b55f7d8ad96ab7d4e25417cb0827c", + "sha256:d5653619b3eb5cbd35bfba3c12d575db2a74d15e0e1c08bf1db788069d410ce8", + "sha256:d66624f04de4af8bbf1c7f21cc06649c1c69a7f84109179add573ce35e46d448", + "sha256:e67ec74fada3841b8c5f4c4f197bea916025cb9aa3fe5abf7d52b655d042f956", + "sha256:e6f7f3f41faffaea6596da86ecc2389672fa949bd035251eab26dc6697451d05", + "sha256:f02cf7221d5cd915d7fa58ab64f7ee6dd0f6cddbb48683debf5d04ae9b1c2cc1", + "sha256:f0eddfcabd6936558ec020130f932d479930581171368fd728efcfb6ef0dd357", + "sha256:fabbe18087c3d33c5824cb145ffca52eccd053061df1d79d4b66dafa5ad2a5ea", + "sha256:fc3150f85e2dbcf99e65238c842d1cfe69d3e7649b19864c1cc043213d9cd730" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.0" }, "mccabe": { "hashes": [ @@ -448,17 +419,11 @@ }, "platformdirs": { "hashes": [ - "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca", - "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda" + "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d", + "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227" ], "markers": "python_version >= '3.7'", - "version": "==2.4.1" - }, - "py-dateutil": { - "hashes": [ - "sha256:7efa2ca17159c590408cb624de9aa10d360f14097cb70dd7559e632f2cf4b048" - ], - "version": "==2.2" + "version": "==2.5.1" }, "pycparser": { "hashes": [ @@ -517,7 +482,7 @@ "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41", "sha256:e0c4bb8d9f0af0c7f5b1ec4c5036309617d03d56932877f2f7a0beeb5318322f" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==2.3.0" }, "pylint": { @@ -532,11 +497,11 @@ }, "pypika-tortoise": { "hashes": [ - "sha256:76d1bb45d9cd92ec18037be312d3ee8a26945f787ce981367cfed1ac6e1a11c9", - "sha256:90a61d3d8b9c19cecd1bdd3ca3515114cb7c3a657a6cad9e9e48cfe6db8cc1e0" + "sha256:28fb2715a94ff2f3bc1c4ef6cc46c385c244c27d100aac760231bf612361d5ba", + "sha256:ecdf2d6e0aeb0e15880d9e2ead41362ec7320f37fb25a3a71664c2e1105ad218" ], "markers": "python_version >= '3.7' and python_version < '4.0'", - "version": "==0.1.2" + "version": "==0.1.3" }, "python-dotenv": { "hashes": [ @@ -547,19 +512,19 @@ }, "python-engineio": { "hashes": [ - "sha256:ad06a975f7e14cb3bb7137cbf70fd883804484d29acd58004d1db1e2a7fc0ad3", - "sha256:fed35eeacfa21f53f1fc05ef0cadd65a50780364da3a2be7650eb92f928fdb11" + "sha256:6e1d26977ffefe3b7da1b5df7a8750aedc7686da8201cd90daf36693db122489", + "sha256:85986067cb9f7695347954d4e03491f7d45152c5428c07109a9707e04e8942cb" ], - "markers": "python_version >= '3.6'", - "version": "==4.3.0" + "markers": "python_full_version >= '3.6.0'", + "version": "==4.3.1" }, "python-socketio": { "hashes": [ - "sha256:ca28a0ff0ca5dd05ec5ba4ee2572fe06b96d6f0bc7df384d8b50fbbc06986134", - "sha256:ce972ea1b82aa1811fa10d30cf0d5c251b9a1558c3d66829b6fe70854bcccf0b" + "sha256:5a1b173a4c3471bed363c502a93b36a02e2a29847645c5557237b3359d49caf0", + "sha256:6213f7dfbb87e554472d11151f96bae9059854aa88e4a1e0fa6e97cca1c3fcf4" ], - "markers": "python_version >= '3.6'", - "version": "==5.5.0" + "markers": "python_full_version >= '3.6.0'", + "version": "==5.5.2" }, "pytz": { "hashes": [ @@ -606,17 +571,13 @@ ], "version": "==6.0" }, - "reporting-server": { - "editable": true, - "path": "./packages/reporting-server" - }, "requests": { "hashes": [ - "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24", - "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" + "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61", + "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d" ], "index": "pypi", - "version": "==2.26.0" + "version": "==2.27.1" }, "ros-translator": { "editable": true, @@ -627,31 +588,23 @@ "sha256:922c5f4edb3aa1beaa47bf61d65d5380011ff6adcd527f26377d05cb73ed8ec8", "sha256:b657ca2b45aa485da2f7dcfd09fac2e554f7ac51ff3c2f8f2ff962ecd963d91c" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==3.2.0" }, "setuptools": { "hashes": [ - "sha256:5c89b1a14a67ac5f0956f1cb0aeb7d1d3f4c8ba4e4e1ab7bf1af4933f9a2f0fe", - "sha256:675fcebecb43c32eb930481abf907619137547f4336206e4d673180242e1a278" + "sha256:2347b2b432c891a863acadca2da9ac101eae6169b1d3dfee2ec605ecd50dbfe5", + "sha256:e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b" ], "markers": "python_version >= '3.7'", - "version": "==60.2.0" - }, - "six": { - "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.16.0" + "version": "==60.9.3" }, "starlette": { "hashes": [ "sha256:3c8e48e52736b3161e34c9f0e8153b4f32ec5d8995a3ee1d59410d92f75162ed", "sha256:7d49f4a27f8742262ef1470608c59ddbc66baf37c148e938c7038e6bc7a998aa" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==0.14.2" }, "toml": { @@ -667,7 +620,7 @@ "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f", "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==1.2.3" }, "tortoise-orm": { @@ -680,19 +633,19 @@ }, "typing-extensions": { "hashes": [ - "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e", - "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b" + "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42", + "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2" ], - "markers": "python_version >= '3.6'", - "version": "==4.0.1" + "markers": "python_full_version >= '3.6.0'", + "version": "==4.1.1" }, "urllib3": { "hashes": [ - "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece", - "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844" + "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed", + "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'", - "version": "==1.26.7" + "version": "==1.26.8" }, "uvicorn": { "extras": [ diff --git a/README.md b/README.md index c8ef336e4..bb0c1121e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![Nightly](https://github.com/open-rmf/rmf-web/actions/workflows/nightly.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/nightly.yml) [![Dashboard End-to-End](https://github.com/open-rmf/rmf-web/actions/workflows/dashboard-e2e.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/dashboard-e2e.yml) [![Reporting End-to-End](https://github.com/open-rmf/rmf-web/actions/workflows/reporting-e2e.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/reporting-e2e.yml) [![react-components](https://github.com/open-rmf/rmf-web/workflows/react-components/badge.svg)](https://github.com/open-rmf/rmf-web/actions?query=workflow%3Areact-components+branch%3Amain) [![dashboard](https://github.com/open-rmf/rmf-web/workflows/dashboard/badge.svg)](https://github.com/open-rmf/rmf-web/actions?query=workflow%3Adashboard+branch%3Amain) [![api-server](https://github.com/open-rmf/rmf-web/workflows/api-server/badge.svg)](https://github.com/open-rmf/rmf-web/actions?query=workflow%3Aapi-server+branch%3Amain) [![reporting](https://github.com/open-rmf/rmf-web/actions/workflows/reporting.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/reporting.yml) [![reporting-server](https://github.com/open-rmf/rmf-web/actions/workflows/reporting-server.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/reporting-server.yml) [![rmf-auth](https://github.com/open-rmf/rmf-web/actions/workflows/rmf-auth.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/rmf-auth.yml) [![ros-translator](https://github.com/open-rmf/rmf-web/actions/workflows/ros-translator.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/ros-translator.yml) [![api-client](https://github.com/open-rmf/rmf-web/actions/workflows/api-client.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/api-client.yml) [![codecov](https://codecov.io/gh/open-rmf/rmf-web/branch/main/graph/badge.svg)](https://codecov.io/gh/open-rmf/rmf-web) +[![Nightly](https://github.com/open-rmf/rmf-web/actions/workflows/nightly.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/nightly.yml) [![Dashboard End-to-End](https://github.com/open-rmf/rmf-web/actions/workflows/dashboard-e2e.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/dashboard-e2e.yml) [![react-components](https://github.com/open-rmf/rmf-web/workflows/react-components/badge.svg)](https://github.com/open-rmf/rmf-web/actions?query=workflow%3Areact-components+branch%3Amain) [![dashboard](https://github.com/open-rmf/rmf-web/workflows/dashboard/badge.svg)](https://github.com/open-rmf/rmf-web/actions?query=workflow%3Adashboard+branch%3Amain) [![api-server](https://github.com/open-rmf/rmf-web/workflows/api-server/badge.svg)](https://github.com/open-rmf/rmf-web/actions?query=workflow%3Aapi-server+branch%3Amain) [![rmf-auth](https://github.com/open-rmf/rmf-web/actions/workflows/rmf-auth.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/rmf-auth.yml) [![ros-translator](https://github.com/open-rmf/rmf-web/actions/workflows/ros-translator.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/ros-translator.yml) [![api-client](https://github.com/open-rmf/rmf-web/actions/workflows/api-client.yml/badge.svg)](https://github.com/open-rmf/rmf-web/actions/workflows/api-client.yml) [![codecov](https://codecov.io/gh/open-rmf/rmf-web/branch/main/graph/badge.svg)](https://codecov.io/gh/open-rmf/rmf-web) # Building the Dashboard diff --git a/codecov.yml b/codecov.yml index c4e0f38f2..04421b984 100644 --- a/codecov.yml +++ b/codecov.yml @@ -15,14 +15,6 @@ flags: paths: - packages/api-server carryforward: true - reporting: - paths: - - packages/reporting - carryforward: true - reporting-server: - paths: - - packages/reporting-server - carryforward: true rmf-auth: paths: - packages/rmf-auth diff --git a/example-deployment/README.md b/example-deployment/README.md index dcb17088d..d9955a99d 100644 --- a/example-deployment/README.md +++ b/example-deployment/README.md @@ -22,8 +22,6 @@ others: * keycloak * nginx * postgres -* minio -* fluentd **NOTE: If you are using this example as a starting point for your own deployment, you must make sure that you have the proper license to use the softwares used in this example.** @@ -146,7 +144,7 @@ When keycloak is ready, test it out by going to https://example.com/auth. The su For this example, we will 1. Create a `rmf-web` realm. -1. Create a `dashboard` and `reporting` client. +1. Create a `dashboard` client. 1. Add https://example.com to the list of allowed origins. 1. Create an example user with user=example password=example. @@ -226,53 +224,6 @@ docker build -t rmf-web/dashboard:example -f docker/dashboard.Dockerfile ws/rmf- docker save rmf-web/dashboard:example | bash -c 'eval $(.bin/minikube docker-env) && docker load' ``` -## [MinIO](https://github.com/minio/minio) -MinIO is a High-Performance Object Storage released under Apache License v2.0. MinIO has several uses but in our case, we will use MinIO to store logs. - -This requires internet connection, see [Deploying in an airgapped network](#deploying-in-an-airgapped-network) if you are in an airgap network. - -We will be using the official minio image, so there is no need to build or publish anything. - -## FluentD - -Fluentd is an open source data collector for unified logging layer. Fluentd allows you to unify data collection and consumption for a better use and understanding of data. - -We will be using the official fluentd image, so there is no need to build or publish anything. - -### Fluentd Configmap - -The fluentd config used in this example can be found at `k8s/example-full/fluentd-configmap.yaml`. - -We have 4 files in our `fluentd-configmap.yaml` : -* `fluent.conf`: Our main config which includes all configurations we want to run. -* `pods-fluent.conf`: `tail` config that sources all pod logs on the `kubernetes` host in the cluster. -* `minio-fluent.conf`: `match` config to capture all logs and send them to MinIO. Every chunck of logs should have 5mb. -Capture all logs and send them to MinIO. Every chunck of logs should have 5mb. -* `minio-fluent-dev.conf`: `match` config to capture all logs and send them to MinIO. Every chunck of logs should have 2kb for development purposes. - -## reporting-server - -build and publish the image - -```bash -docker build -t rmf-web/reporting-server:example -f docker/reporting-server.Dockerfile ws/rmf-web --build-arg BUILDER_TAG=example -docker save rmf-web/reporting-server:example | bash -c 'eval $(.bin/minikube docker-env) && docker load' -``` - -## reporting - -build and publish the image - -```bash -docker build -t rmf-web/reporting:example -f docker/reporting.Dockerfile ws/rmf-web --build-arg BUILDER_TAG=example -``` - -## CronJobs - -Cronjobs are jobs that run periodically on a given schedule. You can configure the schedule following this [cron schedule syntax](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#cron-schedule-syntax) - -The jobs we will run in this example can be found at `k8s/example-full/cronjobs.yaml`, it clean old logs from the database once a day at 0004 (timezone depends on the configuration of the kubernetes cluster). - ## Test the deployment If not done so already, launch the office demo @@ -307,21 +258,17 @@ Sit back and relax, everything will be done for you! There are certain parts that requires an internet connection to fetch the docker images and source codes, in order to deploy from within an airgapped network, you can use obtain the images first, then push them directly to minikube. For example -when you have internet, run this to get the keycloak, MinIO and Fluentd images +when you have internet, run this to get the keycloak image ```bash docker pull quay.io/keycloak/keycloak:12.0.4 -docker pull minio/minio:RELEASE.2021-03-10T05-11-33Z -docker pull fluent/fluentd-kubernetes-daemonset:v1.12.2-debian-s3-1.0 ``` now, connect to the airgapped network and push the images to minikube ```bash docker save quay.io/keycloak/keycloak:12.0.4 | bash -c 'eval $(.bin/minikube docker-env) && docker load' -docker save minio/minio:RELEASE.2021-03-10T05-11-33Z | bash -c 'eval $(.bin/minikube docker-env) && docker load' -docker save fluent/fluentd-kubernetes-daemonset:v1.12.2-debian-s3-1.0 | bash -c 'eval $(.bin/minikube docker-env) && docker load' ``` -now you can deploy keycloak, MinIO and Fluentd without require access to the internet +now you can deploy keycloak without require access to the internet If connection to the internet from the same PC is not possible, you can use `docker save` to save the image into a tarball, then transfer it to the minikube PC through whatever method possible (thumbdrives, cds etc) and use `docker load` to load the image. Then you can use `.bin/minikube load` to push it into minikube. diff --git a/example-deployment/deploy.sh b/example-deployment/deploy.sh index 9c612aae0..eeaca7f35 100755 --- a/example-deployment/deploy.sh +++ b/example-deployment/deploy.sh @@ -44,19 +44,6 @@ docker build -t rmf-web/dashboard:$rmf_web_ver -f docker/dashboard.Dockerfile "$ echo '📤 publishing dashboard image...' docker save rmf-web/dashboard:$rmf_web_ver | bash -c 'eval $(.bin/minikube docker-env) && docker load' -docker build -t rmf-web/reporting-server:$rmf_web_ver -f docker/reporting-server.Dockerfile "$rmf_web_ws" --build-arg BUILDER_TAG=$rmf_web_ver -echo '📤 publishing reporting-server image...' -docker save rmf-web/reporting-server:$rmf_web_ver | bash -c 'eval $(.bin/minikube docker-env) && docker load' - -docker build -t rmf-web/reporting:$rmf_web_ver -f docker/reporting.Dockerfile "$rmf_web_ws" \ - --build-arg BUILDER_TAG=$rmf_web_ver \ - --build-arg PUBLIC_URL='/reporting' \ - --build-arg REACT_APP_REPORTING_SERVER='https://example.com/logserver/api/v1' \ - --build-arg REACT_APP_AUTH_PROVIDER='keycloak' \ - --build-arg REACT_APP_KEYCLOAK_CONFIG='{ "realm": "rmf-web", "clientId": "reporting", "url": "https://example.com/auth" }' -echo '📤 publishing reporting image...' -docker save rmf-web/reporting:$rmf_web_ver | bash -c 'eval $(.bin/minikube docker-env) && docker load' - ### deploy phase # need to deploy keycloak separately because we need to register the apps prior to generating @@ -79,6 +66,4 @@ echo '✅ successfully setup keycloak' # deploy all other components export RMF_SERVER_TAG=$rmf_web_ver export DASHBOARD_TAG=$rmf_web_ver -export REPORTING_SERVER_TAG=$rmf_web_ver -export REPORTING_TAG=$rmf_web_ver ./kustomize-env.sh k8s/example-full | kubectl apply -f - diff --git a/example-deployment/docker/reporting-server.Dockerfile b/example-deployment/docker/reporting-server.Dockerfile deleted file mode 100644 index 1608cc7db..000000000 --- a/example-deployment/docker/reporting-server.Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -ARG BUILDER_TAG -FROM rmf-web/builder:$BUILDER_TAG - -COPY . /root/rmf-web -RUN cd /root/rmf-web && \ - lerna run prepare --include-dependencies --scope=reporting-server && \ - cd packages/reporting-server && \ - npm run prepack - -FROM python:3.9 - -SHELL ["bash", "-c"] - -COPY --from=0 /root/rmf-web/packages/reporting-server/dist/ /root/reporting-server - -RUN cd /root/reporting-server && \ - pip3 install $(ls -1 | grep '.*.whl')[postgres] - -RUN echo -e '#!/bin/bash\n\ - exec reporting_server "$@"\n\ - ' > /docker-entry-point.sh && chmod +x /docker-entry-point.sh -ENTRYPOINT ["/docker-entry-point.sh"] diff --git a/example-deployment/docker/reporting.Dockerfile b/example-deployment/docker/reporting.Dockerfile deleted file mode 100644 index a083b44c9..000000000 --- a/example-deployment/docker/reporting.Dockerfile +++ /dev/null @@ -1,43 +0,0 @@ -ARG BUILDER_TAG -FROM rmf-web/builder:$BUILDER_TAG - -COPY . /root/rmf-web -RUN cd /root/rmf-web && \ - lerna run prepare --include-dependencies --scope=reporting - -ARG PUBLIC_URL -ARG REACT_APP_REPORTING_SERVER -ARG REACT_APP_AUTH_PROVIDER -ARG REACT_APP_KEYCLOAK_CONFIG - -RUN cd /root/rmf-web/packages/reporting && \ - PUBLIC_URL='/reporting' \ - REACT_APP_REPORTING_SERVER='https://example.com/logserver/api/v1' \ - REACT_APP_AUTH_PROVIDER='keycloak' \ - REACT_APP_KEYCLOAK_CONFIG='{ "realm": "rmf-web", "clientId": "reporting", "url": "https://example.com/auth" }' \ - npm run build - -### - -FROM nginx:stable -COPY --from=0 /root/rmf-web/packages/reporting/build /usr/share/nginx/html/reporting -SHELL ["bash", "-c"] -RUN echo -e 'server {\n\ - listen 80;\n\ - server_name localhost;\n\ -\n\ - location / {\n\ - root /usr/share/nginx/html;\n\ - index index.html index.htm;\n\ - try_files $uri /reporting/index.html;\n\ - }\n\ -\n\ - location /reporting/static/ {\n\ - expires 30d;\n\ - }\n\ -\n\ - error_page 500 502 503 504 /50x.html;\n\ - location = /50x.html {\n\ - root /usr/share/nginx/html;\n\ - }\n\ -}\n' > /etc/nginx/conf.d/default.conf diff --git a/example-deployment/k8s/base/reporting-server/fluentd.yaml b/example-deployment/k8s/base/reporting-server/fluentd.yaml deleted file mode 100644 index 57d2c56a6..000000000 --- a/example-deployment/k8s/base/reporting-server/fluentd.yaml +++ /dev/null @@ -1,99 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: fluentd ---- -# to set permission and groups -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: fluentd - namespace: default -rules: -- apiGroups: - - "" - resources: - - pods - - namespaces - verbs: - - get - - list - - watch ---- -kind: RoleBinding -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: fluentd -roleRef: - kind: Role - name: fluentd - apiGroup: rbac.authorization.k8s.io -subjects: -- kind: ServiceAccount - name: fluentd - namespace: default - ---- -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: fluentd - namespace: default - labels: - k8s-app: fluentd-logging - version: v1 -spec: - selector: - matchLabels: - k8s-app: fluentd-logging - version: v1 - template: - metadata: - labels: - k8s-app: fluentd-logging - version: v1 - spec: - serviceAccount: fluentd - serviceAccountName: fluentd - tolerations: - - key: node-role.kubernetes.io/master - effect: NoSchedule - containers: - - name: fluentd - image: fluent/fluentd-kubernetes-daemonset:v1.12.2-debian-s3-1.0 - resources: - limits: - memory: 200Mi - requests: - cpu: 100m - memory: 200Mi - volumeMounts: - - name: fluentd-config - mountPath: /fluentd/etc - - name: varlog - mountPath: /var/log - - name: varlibdockercontainers - mountPath: /var/lib/docker/containers - readOnly: true - env: - # FIXME: This should be on k8s secrets. - # MinIO access key and secret key - - name: MINIO_ACCESS_KEY - value: "minio" - - name: MINIO_SECRET_KEY - value: "minio123" - - name: FLUENTD_USER - value: "fluentd" - - name: FLUENTD_PASSWORD - value: "fluentd123" - terminationGracePeriodSeconds: 30 - volumes: - - name: fluentd-config - configMap: - name: fluentd-config - - name: varlog - hostPath: - path: /var/log - - name: varlibdockercontainers - hostPath: - path: /var/lib/docker/containers \ No newline at end of file diff --git a/example-deployment/k8s/base/reporting-server/kustomization.yaml b/example-deployment/k8s/base/reporting-server/kustomization.yaml deleted file mode 100644 index 2d49fdb51..000000000 --- a/example-deployment/k8s/base/reporting-server/kustomization.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -resources: - - reporting-server.yaml - - minio.yaml - - fluentd.yaml diff --git a/example-deployment/k8s/base/reporting-server/minio.yaml b/example-deployment/k8s/base/reporting-server/minio.yaml deleted file mode 100644 index 5434aa3cd..000000000 --- a/example-deployment/k8s/base/reporting-server/minio.yaml +++ /dev/null @@ -1,121 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - # This name uniquely identifies the service - name: minio-service -spec: - type: LoadBalancer - ports: - - port: 9000 - targetPort: 9000 - protocol: TCP - selector: - # Looks for labels `app:minio` in the namespace and applies the spec - app: minio - ---- - -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - # This name uniquely identifies the PVC. This is used in deployment. - name: minio-pv-claim -spec: - # Read more about access modes here: http://kubernetes.io/docs/user-guide/persistent-volumes/#access-modes - accessModes: - # The volume is mounted as read-write by a single node - - ReadWriteOnce - resources: - # This is the request for storage. Should be available in the cluster. - requests: - storage: 10Gi - ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - # This name uniquely identifies the Deployment - name: minio -spec: - selector: - matchLabels: - app: minio # has to match .spec.template.metadata.labels - strategy: - # Specifies the strategy used to replace old Pods by new ones - # Refer: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy - type: Recreate - template: - metadata: - labels: - # This label is used as a selector in Service definition - app: minio - spec: - # Volumes used by this deployment - volumes: - - name: data - # This volume is based on PVC - persistentVolumeClaim: - # Name of the PVC created earlier - claimName: minio-pv-claim - containers: - - name: minio - # Volume mounts for this container - volumeMounts: - # Volume 'data' is mounted to path '/data' - - name: data - mountPath: "/data" - # Pulls the lastest Minio image from Docker Hub - image: minio/minio:RELEASE.2021-03-10T05-11-33Z - args: - - server - - /data - env: - # FIXME: This should be on k8s secrets. - # MinIO access key and secret key - - name: MINIO_ACCESS_KEY - value: "minio" - - name: MINIO_SECRET_KEY - value: "minio123" - ports: - - containerPort: 9000 - # Readiness probe detects situations when MinIO server instance - # is not ready to accept traffic. Kubernetes doesn't forward - # traffic to the pod while readiness checks fail. - readinessProbe: - httpGet: - path: /minio/health/ready - port: 9000 - initialDelaySeconds: 120 - periodSeconds: 20 - # Liveness probe detects situations where MinIO server instance - # is not working properly and needs restart. Kubernetes automatically - # restarts the pods if liveness checks fail. - livenessProbe: - httpGet: - path: /minio/health/live - port: 9000 - initialDelaySeconds: 120 - periodSeconds: 20 ---- - -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: minio-ingress - labels: - app: minio -spec: - tls: - - hosts: - - example.com - rules: - - host: example.com - http: - paths: - - path: /minio - pathType: Prefix - backend: - service: - name: minio-service - port: - number: 9000 diff --git a/example-deployment/k8s/base/reporting-server/reporting-server.yaml b/example-deployment/k8s/base/reporting-server/reporting-server.yaml deleted file mode 100644 index d05d0b6c2..000000000 --- a/example-deployment/k8s/base/reporting-server/reporting-server.yaml +++ /dev/null @@ -1,154 +0,0 @@ -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: reporting-server-db - labels: - app: reporting-server - tier: db -spec: - accessModes: - - ReadWriteOnce - volumeMode: Filesystem - resources: - requests: - storage: 1Gi ---- -apiVersion: v1 -kind: Service -metadata: - name: reporting-server-db - labels: - app: reporting-server - tier: db -spec: - selector: - app: reporting-server - tier: db - ports: - - port: 5432 ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: reporting-server-db - labels: - app: reporting-server - tier: db -spec: - replicas: 1 - selector: - matchLabels: - app: reporting-server - tier: db - template: - metadata: - labels: - app: reporting-server - tier: db - spec: - containers: - - name: postgresql - image: postgres:13 - env: - - name: POSTGRES_USER - value: reporting-server - - name: POSTGRES_PASSWORD - value: reporting-server - volumeMounts: - - mountPath: /var/lib/postgresql/data - name: reporting-server-db - volumes: - - name: reporting-server-db - persistentVolumeClaim: - claimName: reporting-server-db ---- -apiVersion: v1 -kind: Service -metadata: - name: reporting-server - labels: - app: reporting-server - tier: app -spec: - type: LoadBalancer - selector: - app: reporting-server - tier: app - ports: - - protocol: TCP - port: 8002 - targetPort: 8002 - name: report - - protocol: TCP - port: 8003 - targetPort: 8003 - name: fluentd ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: reporting-server - labels: - app: reporting-server - tier: app -spec: - selector: - matchLabels: - app: reporting-server - tier: app - template: - metadata: - labels: - app: reporting-server - tier: app - spec: - containers: - - name: reporting-server - image: rmf-web/reporting-server - ports: - - containerPort: 8002 - name: report - - containerPort: 8003 - name: fluentd - env: - - name: RMF_REPORT_REST_SERVER_CONFIG - value: /reporting-server-config/reporting_server_config.py - volumeMounts: - - mountPath: /jwt-configmap - name: jwt-pub-key - - mountPath: /reporting-server-config - name: reporting-server-config - hostNetwork: true - dnsPolicy: ClusterFirstWithHostNet - volumes: - - name: jwt-pub-key - configMap: - name: jwt-pub-key - - name: reporting-server-config - configMap: - name: reporting-server-config ---- -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: reporting-server - labels: - app: reporting-server - tier: app - annotations: - nginx.ingress.kubernetes.io/rewrite-target: /$2 -spec: - tls: - - hosts: - - example.com - rules: - - host: example.com - http: - paths: - - path: /logserver/api/v1(/|$)(.*) - pathType: Prefix - backend: - service: - name: reporting-server - port: - number: 8002 diff --git a/example-deployment/k8s/base/reporting/kustomization.yaml b/example-deployment/k8s/base/reporting/kustomization.yaml deleted file mode 100644 index 6f858aa37..000000000 --- a/example-deployment/k8s/base/reporting/kustomization.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -resources: - - reporting.yaml diff --git a/example-deployment/k8s/base/reporting/reporting.yaml b/example-deployment/k8s/base/reporting/reporting.yaml deleted file mode 100644 index 89cf1a8a6..000000000 --- a/example-deployment/k8s/base/reporting/reporting.yaml +++ /dev/null @@ -1,56 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: reporting - labels: - app: reporting -spec: - type: LoadBalancer - selector: - app: reporting - ports: - - protocol: TCP - port: 80 ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: reporting - labels: - app: reporting -spec: - selector: - matchLabels: - app: reporting - template: - metadata: - labels: - app: reporting - spec: - containers: - - name: reporting - image: rmf-web/reporting - ports: - - containerPort: 80 ---- -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: reporting - labels: - app: reporting -spec: - tls: - - hosts: - - example.com - rules: - - host: example.com - http: - paths: - - path: /reporting - pathType: Prefix - backend: - service: - name: reporting - port: - number: 80 diff --git a/example-deployment/k8s/example-full/cronjobs.yaml b/example-deployment/k8s/example-full/cronjobs.yaml deleted file mode 100644 index 2df47a579..000000000 --- a/example-deployment/k8s/example-full/cronjobs.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: batch/v1beta1 -kind: CronJob -metadata: - name: reporting-server-clean-logs -spec: - # Once a day - schedule: "4 0 * * *" - jobTemplate: - spec: - template: - spec: - restartPolicy: Never - containers: - - name: reporting-server-clean-logs - image: rmf-web/reporting-server - command: - - /bin/sh - - -c - - reporting_server_clean_logs - env: - - name: RMF_REPORT_REST_SERVER_CONFIG - value: /reporting-server-config/reporting_server_config.py - - volumeMounts: - - mountPath: /jwt-configmap - name: jwt-pub-key - - mountPath: /reporting-server-config - name: reporting-server-config - volumes: - - name: jwt-pub-key - configMap: - name: jwt-pub-key - - name: reporting-server-config - configMap: - name: reporting-server-config \ No newline at end of file diff --git a/example-deployment/k8s/example-full/fluentd-configmap.yaml b/example-deployment/k8s/example-full/fluentd-configmap.yaml deleted file mode 100644 index c3c114063..000000000 --- a/example-deployment/k8s/example-full/fluentd-configmap.yaml +++ /dev/null @@ -1,167 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: fluentd-config -data: - fluent.conf: |- - ################################################################ - # This source gets all logs from local docker host - @include pods-fluent.conf - @include reporting-server.conf - @include reporting-server-all-logs.conf - @include keycloak-logs.conf - # Use this configuration for production - @include minio-fluent.conf - # @include minio-fluent-dev.conf - # This is for running fluentd in the cloud - pods-fluent.conf: |- - - @type tail - read_from_head true - tag rmf.all.* - path /var/log/containers/*.log - pos_file /var/log/fluent/fluentd-rmf-all.log.pos - exclude_path ["/var/log/containers/fluent*"] - format json - time_format %Y-%m-%dT%H:%M:%S.%NZ - - - - @type kubernetes_metadata - - - - @type tail - read_from_head true - tag rmf.server.* - path /var/log/containers/rmf-server*.log - pos_file /var/log/fluent/fluentd-rmf-server.log.pos - exclude_path ["/var/log/containers/fluent*"] - - @type kubernetes - @type "#{ENV['FLUENT_CONTAINER_TAIL_PARSER_TYPE'] || 'json'}" - time_format %Y-%m-%dT%H:%M:%S.%NZ - - - - - @type tail - read_from_head true - tag keycloak.* - path /var/log/containers/keycloak*.log - pos_file /var/log/fluent/fluentd-keycloak.log.pos - exclude_path ["/var/log/containers/keycloak-db*"] - - @type kubernetes - @type "#{ENV['FLUENT_CONTAINER_TAIL_PARSER_TYPE'] || 'json'}" - time_format %Y-%m-%dT%H:%M:%S.%NZ - - - - - @type tail - read_from_head true - tag minio.s3.* - path /var/log/containers/*.log - pos_file /var/log/fluent/fluentd-all-containers.log.pos - exclude_path ["/var/log/containers/fluent*"] - - @type kubernetes - @type "#{ENV['FLUENT_CONTAINER_TAIL_PARSER_TYPE'] || 'json'}" - time_format %Y-%m-%dT%H:%M:%S.%NZ - - - - minio-fluent-dev.conf: |- - - @type s3 - aws_key_id "#{ENV['MINIO_ACCESS_KEY']}" # The access key for Minio - aws_sec_key "#{ENV['MINIO_SECRET_KEY']}" # The secret key for Minio - s3_bucket test # The bucket to store the log data - s3_endpoint http://minio-service:9000/ # The endpoint URL - # s3_region us-east-1 # See the region settings of your Minio server - path logs/ # This prefix is added to each file - force_path_style true # This prevents AWS SDK from breaking endpoint URL - time_slice_format %Y%m%d%H%M # This timestamp is added to each file name - - @type file - path /var/log/fluent/s3 - timekey 1m # Flush the accumulated chunks every 1 min - timekey_wait 1s # Wait for 1 seconds before flushing - timekey_use_utc true # Use this option if you prefer UTC timestamps - chunk_limit_size 2k # The maximum size of each chunk - - - - minio-fluent.conf: |- - - @type s3 - aws_key_id "#{ENV['MINIO_ACCESS_KEY']}" # The access key for Minio - aws_sec_key "#{ENV['MINIO_SECRET_KEY']}" # The secret key for Minio - s3_bucket test # The bucket to store the log data - s3_endpoint http://minio-service:9000/ # The endpoint URL - # s3_region us-east-1 # See the region settings of your Minio server - path logs/ # This prefix is added to each file - force_path_style true # This prevents AWS SDK from breaking endpoint URL - time_slice_format %Y%m%d%H%M # This timestamp is added to each file name - - @type file - path /var/log/fluent/s3 - timekey 60m # Flush the accumulated chunks every hour - timekey_wait 1m # Wait for 60 seconds before flushing - timekey_use_utc true # Use this option if you prefer UTC timestamps - chunk_limit_size 5mb # The maximum size of each chunk - - - - reporting-server.conf: |- - - @type http - endpoint http://reporting-server:8003/log/rmfserver/ - http_method post - open_timeout 3 - # content_type - - @type json - - json_array true - - flush_interval 10s - - - method basic - username "#{ENV['FLUENTD_USER']}" - password "#{ENV['FLUENTD_PASSWORD']}" - - - - reporting-server-all-logs.conf: |- - - @type http - endpoint http://reporting-server:8003/log/all/ - http_method post - open_timeout 3 - - @type json - - json_array true - - flush_interval 10s - - - - keycloak-logs.conf: |- - - @type http - endpoint http://reporting-server:8003/log/keycloak/ - http_method post - open_timeout 3 - - @type json - - json_array true - - flush_interval 10s - - - \ No newline at end of file diff --git a/example-deployment/k8s/example-full/kustomization.yaml b/example-deployment/k8s/example-full/kustomization.yaml index 20c439688..78d698388 100644 --- a/example-deployment/k8s/example-full/kustomization.yaml +++ b/example-deployment/k8s/example-full/kustomization.yaml @@ -6,8 +6,6 @@ commonLabels: bases: - ../example-lite - - ../base/reporting-server - - ../base/reporting resources: - cronjobs.yaml @@ -21,19 +19,8 @@ images: newTag: ${RMF_SERVER_TAG} - name: rmf-web/dashboard newTag: ${DASHBOARD_TAG} - - name: rmf-web/reporting-server - newTag: ${REPORTING_SERVER_TAG} - - name: rmf-web/reporting - newTag: ${REPORTING_TAG} configMapGenerator: - name: jwt-pub-key files: - keycloak/jwt-pub-key.pub - - name: reporting-server-config - files: - - reporting_server_config.py - - name: rmf-server-config - files: - - rmf_server_config.py - behavior: replace diff --git a/example-deployment/k8s/example-full/reporting_server_config.py b/example-deployment/k8s/example-full/reporting_server_config.py deleted file mode 100644 index ee5e0aedc..000000000 --- a/example-deployment/k8s/example-full/reporting_server_config.py +++ /dev/null @@ -1,19 +0,0 @@ -from copy import deepcopy - -from rest_server.default_config import config as default_config - -config = deepcopy(default_config) -config["host"] = "0.0.0.0" -config["port"] = 8002 -config["port_fluentd"] = 8003 -config[ - "db_url" -] = "postgres://reporting-server:reporting-server@reporting-server-db/reporting-server" -config["public_url"] = "https://example.com/logserver/api/v1" -config["log_level"] = "INFO" -config["jwt_public_key"] = "/jwt-configmap/jwt-pub-key.pub" -config[ - "oidc_url" -] = "https://example.com/auth/realms/rmf-web/.well-known/openid-configuration" -config["aud"] = "reporting" -config["iss"] = "https://example.com/auth/realms/rmf-web" diff --git a/example-deployment/keycloak-tools/bootstrap-keycloak.js b/example-deployment/keycloak-tools/bootstrap-keycloak.js index f5aa75f09..f4b6c4023 100644 --- a/example-deployment/keycloak-tools/bootstrap-keycloak.js +++ b/example-deployment/keycloak-tools/bootstrap-keycloak.js @@ -77,21 +77,6 @@ async function createAudienceClientScope(headers, name, description, audience) { }, ); - await tryRequest( - `${baseUrl}/admin/realms/rmf-web/clients`, - { - method: 'POST', - headers: authHeaders(token), - }, - { - clientId: 'reporting', - rootUrl: 'https://example.com', - redirectUris: ['https://example.com/*'], - webOrigins: ['https://example.com'], - publicClient: true, - }, - ); - { // create admin user await tryRequest( @@ -182,14 +167,7 @@ async function createAudienceClientScope(headers, name, description, audience) { 'dashboard', ); - await createAudienceClientScope( - authHeaders(token), - 'reporting', - 'reporting scope', - 'reporting', - ); - - // get existing clients (dashboard and reporting) + // get existing clients const clientsRaw = await request(`${baseUrl}/admin/realms/rmf-web/clients`, { method: 'GET', headers: authHeaders(token), @@ -201,11 +179,7 @@ async function createAudienceClientScope(headers, name, description, audience) { return item.clientId === 'dashboard'; })[0].id; - const reportingId = clientArray.filter(function (item) { - return item.clientId === 'reporting'; - })[0].id; - - // get existing clients (dashboard and reporting) + // get existing clients const clientsScopeRaw = await request(`${baseUrl}/admin/realms/rmf-web/client-scopes`, { method: 'GET', headers: authHeaders(token), @@ -216,12 +190,7 @@ async function createAudienceClientScope(headers, name, description, audience) { return item.name == 'dashboard'; })[0].id; - const clientScopeReportingId = clientScopesArray.filter(function (item) { - return item.name == 'reporting'; - })[0].id; - await setClientScopeToClient(authHeaders(token), dashboardId, clientScopeDashboardId); - await setClientScopeToClient(authHeaders(token), reportingId, clientScopeReportingId); } catch (e) { process.exitCode = 1; } diff --git a/package-lock.json b/package-lock.json index 90414e597..54b3da144 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,9 +11,6 @@ "packages/dashboard", "packages/dashboard-e2e", "packages/react-components", - "packages/reporting", - "packages/reporting-e2e", - "packages/reporting-server", "packages/rmf-auth", "packages/rmf-models", "packages/ros-translator", @@ -17363,12 +17360,6 @@ "node": ">=4" } }, - "node_modules/cssfontparser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cssfontparser/-/cssfontparser-1.2.1.tgz", - "integrity": "sha1-9AIvyPlwDGgCnVQghK+69CWj8+M=", - "dev": true - }, "node_modules/cssnano": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", @@ -24169,16 +24160,6 @@ "node": ">= 10.14.2" } }, - "node_modules/jest-canvas-mock": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.3.1.tgz", - "integrity": "sha512-5FnSZPrX3Q2ZfsbYNE3wqKR3+XorN8qFzDzB5o0golWgt6EOX1+emBnpOc9IAQ+NXFj8Nzm3h7ZdE/9H0ylBcg==", - "dev": true, - "dependencies": { - "cssfontparser": "^1.2.1", - "moo-color": "^1.0.2" - } - }, "node_modules/jest-changed-files": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", @@ -27558,15 +27539,6 @@ "node": ">=10" } }, - "node_modules/moo-color": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.2.tgz", - "integrity": "sha512-5iXz5n9LWQzx/C2WesGFfpE6RLamzdHwsn3KpfzShwbfIqs7stnoEpaNErf/7+3mbxwZ4s8Foq7I0tPxw7BWHg==", - "dev": true, - "dependencies": { - "color-name": "^1.1.4" - } - }, "node_modules/move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -33848,18 +33820,6 @@ "node": ">=0.10" } }, - "node_modules/reporting": { - "resolved": "packages/reporting", - "link": true - }, - "node_modules/reporting-e2e": { - "resolved": "packages/reporting-e2e", - "link": true - }, - "node_modules/reporting-server": { - "resolved": "packages/reporting-server", - "link": true - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -42266,60 +42226,6 @@ "react-router-dom": "^5.2.0" } }, - "packages/reporting": { - "version": "0.0.1", - "license": "Apache-2.0", - "devDependencies": { - "@fontsource/roboto": "^4.3.0", - "@storybook/addon-actions": "^6.3.7", - "@storybook/addon-essentials": "^6.3.7", - "@storybook/addon-links": "^6.3.7", - "@storybook/react": "^6.3.7", - "@testing-library/jest-dom": "^5.11.4", - "@testing-library/react": "^11.2.3", - "@testing-library/react-hooks": "^5.0.3", - "@testing-library/user-event": "^12.1.9", - "@types/debug": "^4.1.5", - "@types/jest": "^26.0.13", - "@types/react": "^17.0.19", - "@types/react-dom": "^17.0.9", - "@types/react-router": "^5.1.7", - "@types/react-router-dom": "^5.1.7", - "axios": "^0.21.1", - "clsx": "^1.1.1", - "jest-canvas-mock": "^2.3.1", - "react": "^17.0.2", - "react-components": "file:../react-components", - "react-router": "^5.2.0", - "react-router-dom": "^5.2.0", - "react-scripts": "^4.0.3", - "reporting-server": "file:../reporting-server", - "rmf-auth": "file:../rmf-auth", - "ts-node": "^9.1.1", - "typescript": "~4.4.4" - } - }, - "packages/reporting-e2e": { - "devDependencies": { - "@types/mocha": "^9.0.0", - "@wdio/cli": "7.11.1", - "@wdio/local-runner": "7.11.1", - "@wdio/mocha-framework": "7.11.1", - "@wdio/spec-reporter": "7.10.1", - "concurrently": "^5.3.0", - "node-fetch": "^2.6.1", - "reporting": "file:../reporting", - "serve": "^11.3.2", - "ts-node": "^9.1.1", - "typescript": "~4.4.4" - } - }, - "packages/reporting-server": { - "version": "0.0.1", - "devDependencies": { - "pipenv-install": "file:../../pipenv-install" - } - }, "packages/rmf-auth": { "version": "0.0.1", "license": "Apache-2.0", @@ -55776,12 +55682,6 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, - "cssfontparser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cssfontparser/-/cssfontparser-1.2.1.tgz", - "integrity": "sha1-9AIvyPlwDGgCnVQghK+69CWj8+M=", - "dev": true - }, "cssnano": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", @@ -61092,16 +60992,6 @@ "jest-cli": "^26.6.3" } }, - "jest-canvas-mock": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.3.1.tgz", - "integrity": "sha512-5FnSZPrX3Q2ZfsbYNE3wqKR3+XorN8qFzDzB5o0golWgt6EOX1+emBnpOc9IAQ+NXFj8Nzm3h7ZdE/9H0ylBcg==", - "dev": true, - "requires": { - "cssfontparser": "^1.2.1", - "moo-color": "^1.0.2" - } - }, "jest-changed-files": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", @@ -63839,15 +63729,6 @@ } } }, - "moo-color": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.2.tgz", - "integrity": "sha512-5iXz5n9LWQzx/C2WesGFfpE6RLamzdHwsn3KpfzShwbfIqs7stnoEpaNErf/7+3mbxwZ4s8Foq7I0tPxw7BWHg==", - "dev": true, - "requires": { - "color-name": "^1.1.4" - } - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -68906,60 +68787,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "reporting": { - "version": "file:packages/reporting", - "requires": { - "@fontsource/roboto": "^4.3.0", - "@storybook/addon-actions": "^6.3.7", - "@storybook/addon-essentials": "^6.3.7", - "@storybook/addon-links": "^6.3.7", - "@storybook/react": "^6.3.7", - "@testing-library/jest-dom": "^5.11.4", - "@testing-library/react": "^11.2.3", - "@testing-library/react-hooks": "^5.0.3", - "@testing-library/user-event": "^12.1.9", - "@types/debug": "^4.1.5", - "@types/jest": "^26.0.13", - "@types/react": "^17.0.19", - "@types/react-dom": "^17.0.9", - "@types/react-router": "^5.1.7", - "@types/react-router-dom": "^5.1.7", - "axios": "^0.21.1", - "clsx": "^1.1.1", - "jest-canvas-mock": "^2.3.1", - "react": "^17.0.2", - "react-components": "file:../react-components", - "react-router": "^5.2.0", - "react-router-dom": "^5.2.0", - "react-scripts": "^4.0.3", - "reporting-server": "file:../reporting-server", - "rmf-auth": "file:../rmf-auth", - "ts-node": "^9.1.1", - "typescript": "~4.4.4" - } - }, - "reporting-e2e": { - "version": "file:packages/reporting-e2e", - "requires": { - "@types/mocha": "^9.0.0", - "@wdio/cli": "7.11.1", - "@wdio/local-runner": "7.11.1", - "@wdio/mocha-framework": "7.11.1", - "@wdio/spec-reporter": "7.10.1", - "concurrently": "^5.3.0", - "node-fetch": "^2.6.1", - "reporting": "file:../reporting", - "serve": "^11.3.2", - "ts-node": "^9.1.1", - "typescript": "~4.4.4" - } - }, - "reporting-server": { - "version": "file:packages/reporting-server", - "requires": { - "pipenv-install": "file:../../pipenv-install" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -69394,7 +69221,7 @@ "@types/react-router": "^5.1.7", "@types/react-router-dom": "^5.1.7", "@types/reactour": "^1.17.1", - "ajv": "*", + "ajv": "^8.10.0", "api-client": "file:../api-client", "api-server": "file:../api-server", "axios": "^0.21.1", diff --git a/package.json b/package.json index eb186afa4..b1aa69799 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,6 @@ "packages/dashboard", "packages/dashboard-e2e", "packages/react-components", - "packages/reporting", - "packages/reporting-e2e", - "packages/reporting-server", "packages/rmf-auth", "packages/rmf-models", "packages/ros-translator", diff --git a/packages/react-components/lib/index.ts b/packages/react-components/lib/index.ts index bdc90588f..320742b77 100644 --- a/packages/react-components/lib/index.ts +++ b/packages/react-components/lib/index.ts @@ -19,7 +19,6 @@ export * from './logo-button'; export * from './map'; export * from './navigation-bar'; export * from './place'; -export * from './reports'; export * from './robots'; export * from './simple-filter'; export * from './simple-info'; diff --git a/packages/react-components/lib/reports/default-date-form.spec.tsx b/packages/react-components/lib/reports/default-date-form.spec.tsx deleted file mode 100644 index f30a4d8e6..000000000 --- a/packages/react-components/lib/reports/default-date-form.spec.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { render } from '@testing-library/react'; -import React from 'react'; -import { TestLocalizationProvider } from '../test/locale'; -import { DefaultDatesForm } from './default-dates-form'; -import { reportConfigProps } from './utils.spec'; - -describe('Default date form', () => { - it('places correctly initial values', () => { - const date = new Date(); - const newConfig = { ...reportConfigProps, fromLogDate: date, toLogDate: date }; - const root = render(, { wrapper: TestLocalizationProvider }); - const fromInput = root.getByLabelText('From'); - expect(fromInput.getAttribute('data-unix')).toBe(date.valueOf().toString()); - const toInput = root.getByLabelText('To'); - expect(toInput.getAttribute('data-unix')).toBe(date.valueOf().toString()); - }); -}); diff --git a/packages/react-components/lib/reports/default-dates-form.tsx b/packages/react-components/lib/reports/default-dates-form.tsx deleted file mode 100644 index 31661bb66..000000000 --- a/packages/react-components/lib/reports/default-dates-form.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import DateTimePicker from '@mui/lab/DateTimePicker'; -import { styled, TextField } from '@mui/material'; -import Button from '@mui/material/Button'; -import React from 'react'; -import { LogQueryPayload } from '.'; - -interface DefaultDatesFormProps { - search?: (payload: LogQueryPayload) => void; - fromLogDate?: Date; - toLogDate?: Date; - onSelectFromDate?: (date: unknown) => void; - onSelectToDate?: (date: unknown) => void; -} - -const classes = { - searchForm: 'traj-time-control-root', - searchButton: 'traj-time-control-container', -}; -const StyledDiv = styled('div')(() => ({ - [`& .${classes.searchForm}`]: { - display: 'flex', - justifyContent: 'space-evenly', - }, - [`& .${classes.searchButton}`]: { - width: '100%', - }, -})); - -export const DefaultDatesForm = (props: DefaultDatesFormProps): JSX.Element | null => { - const { search, fromLogDate, toLogDate, onSelectToDate, onSelectFromDate } = props; - const searchQuery = () => { - search && search({ toLogDate, fromLogDate }); - }; - - return onSelectFromDate && onSelectToDate ? ( - -
- ( - - )} - /> - ( - - )} - /> -
- -

- -
- ) : null; -}; diff --git a/packages/react-components/lib/reports/default-report-interface.tsx b/packages/react-components/lib/reports/default-report-interface.tsx deleted file mode 100644 index 1f0395004..000000000 --- a/packages/react-components/lib/reports/default-report-interface.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { styled } from '@mui/material'; - -export const defaultReportClasses = { - table: 'default-report-table', -}; -export const DefaultReportContainer = styled('div')(() => ({ - [`& .${defaultReportClasses.table}`]: { - overflowY: 'scroll', - paddingTop: '20px', - }, -})); - -export interface DefaultReportQueryPayload { - toLogDate?: unknown | null; - fromLogDate?: unknown | null; - offset?: number | null; - limit?: number | null; -} - -export interface DefaultLogTableProps { - tableSize?: number; - addMoreRows?(): void; -} diff --git a/packages/react-components/lib/reports/dispenser-state/dispenser-state-report-table.spec.tsx b/packages/react-components/lib/reports/dispenser-state/dispenser-state-report-table.spec.tsx deleted file mode 100644 index fb022b112..000000000 --- a/packages/react-components/lib/reports/dispenser-state/dispenser-state-report-table.spec.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { cleanup, render, RenderResult, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { format } from 'date-fns'; -import React from 'react'; -import { getDispenserLogs } from '../utils.spec'; -import { DispenserStateReportTable } from './dispenser-state-report-table'; - -const timestamp = new Date('Mon Jan 1 00:00:02 UTC 2001'); - -describe('Dispenser table test', () => { - let root: RenderResult; - let mockAddMoreRows: ReturnType; - - beforeEach(() => { - mockAddMoreRows = jasmine.createSpy(); - root = render( - , - ); - }); - - afterEach(cleanup); - - it('formats dates correctly', async () => { - const tableFirstDateElement = (await root.getAllByTestId('dispenser-table-date'))[0]; - expect(tableFirstDateElement.innerHTML).toBe(format(timestamp, 'MMM dd yyyy hh:mm aaa')); - }); - - it('shows the correct number of rows', () => { - const allRows = root.container.querySelectorAll('.MuiDataGrid-row').length; - expect(allRows).toBe(100); - }); - - it('shows titles correctly', () => { - expect(screen.queryByText('Guid')).toBeTruthy(); - expect(screen.queryByText('State')).toBeTruthy(); - expect(screen.queryByText('Timestamp')).toBeTruthy(); - }); - - it('executes the addMoreRows', () => { - const nextPageButton = screen.queryByLabelText('Go to next page'); - nextPageButton && userEvent.click(nextPageButton); - expect(mockAddMoreRows).toHaveBeenCalled(); - }); -}); diff --git a/packages/react-components/lib/reports/dispenser-state/dispenser-state-report-table.tsx b/packages/react-components/lib/reports/dispenser-state/dispenser-state-report-table.tsx deleted file mode 100644 index b81d59926..000000000 --- a/packages/react-components/lib/reports/dispenser-state/dispenser-state-report-table.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React from 'react'; -import { DataGrid, GridRenderCellParams } from '@mui/x-data-grid'; -import { Typography } from '@mui/material'; -import { DefaultLogTableProps } from '../default-report-interface'; -import { format } from 'date-fns'; - -export type DispenserStateRowsType = { - created: string; //date - guid: string; - state: string; -}[]; - -export interface DispenserStateReportTable extends DefaultLogTableProps { - rows: DispenserStateRowsType | []; -} - -export const DispenserStateReportTable = (props: DispenserStateReportTable): React.ReactElement => { - const { rows, addMoreRows } = props; - - return ( -
- r.guid} - columns={[ - { - headerName: 'Guid', - field: 'guid', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.guid}; - }, - }, - { - headerName: 'State', - field: 'state', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.state}; - }, - }, - { - headerName: 'Timestamp', - field: 'created', - type: 'datetime', - filterable: false, - align: 'center', - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {format(new Date(rowData.value as number), 'MMM dd yyyy hh:mm aaa')} - - ); - }, - }, - ]} - rows={rows} - pageSize={100} - rowsPerPageOptions={[50, 100]} - onPageChange={() => { - if (addMoreRows) { - addMoreRows(); - } - }} - disableColumnMenu={true} - /> -
- ); -}; diff --git a/packages/react-components/lib/reports/dispenser-state/dispenser-state-report.spec.tsx b/packages/react-components/lib/reports/dispenser-state/dispenser-state-report.spec.tsx deleted file mode 100644 index 695f346af..000000000 --- a/packages/react-components/lib/reports/dispenser-state/dispenser-state-report.spec.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { render, screen, waitFor } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { getDispenserLogs, reportConfigProps } from '../utils.spec'; -import { DispenserStateReport } from './dispenser-state-report'; -import { TestLocalizationProvider } from '../../test/locale'; - -const getLogsPromise = async () => getDispenserLogs(); - -it('smoke test', async () => { - await waitFor(() => { - render(); - }); -}); - -it('doesn`t shows the table when logs list is empty', async () => { - await waitFor(() => { - render( []} />); - }); - - expect(screen.queryByText('Dispenser State')).toBeFalsy(); -}); - -it('calls the retrieve log function when the button is clicked', () => { - const getLogsPromiseMock = jasmine.createSpy(); - const getLogsPromise = async () => { - getLogsPromiseMock(); - return getDispenserLogs(); - }; - render(, { - wrapper: TestLocalizationProvider, - }); - expect(screen.getByRole('button', { name: /Retrieve Logs/i })).toBeTruthy(); - userEvent.click(screen.getByRole('button', { name: /Retrieve Logs/i })); - expect(getLogsPromiseMock).toHaveBeenCalled(); -}); diff --git a/packages/react-components/lib/reports/dispenser-state/dispenser-state-report.tsx b/packages/react-components/lib/reports/dispenser-state/dispenser-state-report.tsx deleted file mode 100644 index 28af636c3..000000000 --- a/packages/react-components/lib/reports/dispenser-state/dispenser-state-report.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - defaultReportClasses, - DefaultReportContainer, -} from '../default-report-interface'; -import { DefaultDatesForm } from '../default-dates-form'; -import { DispenserStateReportTable, DispenserStateRowsType } from './dispenser-state-report-table'; -import { ReportConfigProps } from '../utils'; - -export interface DispenserStateReportProps extends ReportConfigProps { - getLogs: (data: DefaultReportQueryPayload) => Promise; -} - -export const DispenserStateReport = (props: DispenserStateReportProps): React.ReactElement => { - const { getLogs, ...otherProps } = props; - const [logs, setLogs] = React.useState([]); - const [lastSearchParams, setLastSearchParams] = React.useState({}); - - const searchLogs = async (payload: DefaultReportQueryPayload) => { - setLastSearchParams(payload); - setLogs(await getLogs(payload)); - }; - - const getMoreLogs = async () => { - setLogs(logs.concat(await getLogs({ ...lastSearchParams, offset: logs.length }))); - }; - - return ( - - -
- {logs.length !== 0 && ( - - )} -
-
- ); -}; - -export default DispenserStateReport; diff --git a/packages/react-components/lib/reports/dispenser-state/index.ts b/packages/react-components/lib/reports/dispenser-state/index.ts deleted file mode 100644 index f3522dc5f..000000000 --- a/packages/react-components/lib/reports/dispenser-state/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dispenser-state-report'; -export * from './dispenser-state-report-table'; diff --git a/packages/react-components/lib/reports/door-state/door-state-report-table.spec.tsx b/packages/react-components/lib/reports/door-state/door-state-report-table.spec.tsx deleted file mode 100644 index ea0dafc60..000000000 --- a/packages/react-components/lib/reports/door-state/door-state-report-table.spec.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { cleanup, render, RenderResult, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { format } from 'date-fns'; -import React from 'react'; -import { getDoorLogs } from '../utils.spec'; -import { DoorStateReportTable } from './door-state-report-table'; - -const timestamp = new Date('Mon Jan 1 00:00:02 UTC 2001'); - -describe('Door table test', () => { - let root: RenderResult; - let mockAddMoreRows: ReturnType; - - beforeEach(() => { - mockAddMoreRows = jasmine.createSpy(); - root = render(); - }); - - afterEach(cleanup); - - it('formats dates correctly', async () => { - const tableFirstDateElement = (await root.getAllByTestId('door-table-date'))[0]; - expect(tableFirstDateElement.innerHTML).toBe(format(timestamp, 'MMM dd yyyy hh:mm aaa')); - }); - - it('shows the correct number of rows', () => { - const allRows = root.container.querySelectorAll('.MuiDataGrid-row').length; - expect(allRows).toBe(100); - }); - - it('shows titles correctly', () => { - expect(screen.queryByText('Name')).toBeTruthy(); - expect(screen.queryByText('State')).toBeTruthy(); - expect(screen.queryByText('Timestamp')).toBeTruthy(); - }); - - it('executes the addMoreRows', () => { - const nextPageButton = screen.queryByTitle('Go to next page'); - nextPageButton && userEvent.click(nextPageButton); - expect(mockAddMoreRows).toHaveBeenCalled(); - }); -}); diff --git a/packages/react-components/lib/reports/door-state/door-state-report-table.tsx b/packages/react-components/lib/reports/door-state/door-state-report-table.tsx deleted file mode 100644 index efc677813..000000000 --- a/packages/react-components/lib/reports/door-state/door-state-report-table.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react'; -import { DataGrid, GridRenderCellParams } from '@mui/x-data-grid'; -import { Typography } from '@mui/material'; -import { DefaultLogTableProps } from '../default-report-interface'; -import { format } from 'date-fns'; - -export type DoorStateRowsType = { - created: string; //date - door: { id: number; name: string }; - state: string; -}[]; - -export interface DoorStateReportTable extends DefaultLogTableProps { - rows: DoorStateRowsType | []; -} - -export const DoorStateReportTable = (props: DoorStateReportTable): React.ReactElement => { - const { rows, addMoreRows } = props; - return ( -
- r.door.id} - columns={[ - { - headerName: 'Name', - field: 'name', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.door.name}; - }, - }, - { - headerName: 'State', - field: 'state', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.state}; - }, - }, - { - headerName: 'Timestamp', - field: 'created', - type: 'datetime', - filterable: false, - align: 'center', - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {format(new Date(rowData.value as number), 'MMM dd yyyy hh:mm aaa')} - - ); - }, - }, - ]} - rows={rows} - pageSize={100} - rowsPerPageOptions={[50, 100]} - onPageChange={() => { - if (addMoreRows) { - addMoreRows(); - } - }} - disableColumnMenu={true} - /> -
- ); -}; diff --git a/packages/react-components/lib/reports/door-state/door-state-report.spec.tsx b/packages/react-components/lib/reports/door-state/door-state-report.spec.tsx deleted file mode 100644 index f3b63cbda..000000000 --- a/packages/react-components/lib/reports/door-state/door-state-report.spec.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { render, screen, waitFor } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { TestLocalizationProvider } from '../../test/locale'; -import { getDoorLogs, reportConfigProps } from '../utils.spec'; -import { DoorStateReport } from './door-state-report'; - -const getLogsPromise = async () => getDoorLogs(); - -it('smoke test', async () => { - await waitFor(() => { - render(); - }); -}); - -it('doesn`t shows the table when logs list is empty', async () => { - await waitFor(() => { - render( []} />); - }); - - expect(screen.queryByText('Door State')).toBeFalsy(); -}); - -it('calls the retrieve log function when the button is clicked', () => { - const getLogsPromiseMock = jasmine.createSpy(); - const getLogsPromise = async () => { - getLogsPromiseMock(); - return getDoorLogs(); - }; - render(, { - wrapper: TestLocalizationProvider, - }); - expect(screen.getByRole('button', { name: /Retrieve Logs/i })).toBeTruthy(); - userEvent.click(screen.getByRole('button', { name: /Retrieve Logs/i })); - expect(getLogsPromiseMock).toHaveBeenCalled(); -}); diff --git a/packages/react-components/lib/reports/door-state/door-state-report.tsx b/packages/react-components/lib/reports/door-state/door-state-report.tsx deleted file mode 100644 index 7c7d837e0..000000000 --- a/packages/react-components/lib/reports/door-state/door-state-report.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - defaultReportClasses, - DefaultReportContainer, -} from '../default-report-interface'; -import { DefaultDatesForm } from '../default-dates-form'; -import { DoorStateReportTable, DoorStateRowsType } from './door-state-report-table'; -import { ReportConfigProps } from '../utils'; - -export interface DoorStateReportProps extends ReportConfigProps { - getLogs: (data: DefaultReportQueryPayload) => Promise; -} - -export const DoorStateReport = (props: DoorStateReportProps): React.ReactElement => { - const { getLogs, ...otherProps } = props; - const [logs, setLogs] = React.useState([]); - const [lastSearchParams, setLastSearchParams] = React.useState({}); - - const searchLogs = async (payload: DefaultReportQueryPayload) => { - setLastSearchParams(payload); - setLogs(await getLogs(payload)); - }; - - const getMoreLogs = async () => { - setLogs(logs.concat(await getLogs({ ...lastSearchParams, offset: logs.length }))); - }; - - return ( - - -
- {logs.length !== 0 && ( - - )} -
-
- ); -}; - -export default DoorStateReport; diff --git a/packages/react-components/lib/reports/door-state/index.ts b/packages/react-components/lib/reports/door-state/index.ts deleted file mode 100644 index 7b4b3a528..000000000 --- a/packages/react-components/lib/reports/door-state/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './door-state-report'; -export * from './door-state-report-table'; diff --git a/packages/react-components/lib/reports/fleet-state/fleet-state-report-table.spec.tsx b/packages/react-components/lib/reports/fleet-state/fleet-state-report-table.spec.tsx deleted file mode 100644 index cf7256061..000000000 --- a/packages/react-components/lib/reports/fleet-state/fleet-state-report-table.spec.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { cleanup, render, RenderResult, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { format } from 'date-fns'; -import React from 'react'; -import { getFleetLogs } from '../utils.spec'; -import { FleetStateReportTable } from './fleet-state-report-table'; - -const timestamp = new Date('Mon Jan 1 00:00:02 UTC 2001'); - -describe('Fleet table test', () => { - let root: RenderResult; - let mockAddMoreRows: ReturnType; - - beforeEach(() => { - mockAddMoreRows = jasmine.createSpy(); - root = render(); - }); - - afterEach(cleanup); - - it('formats dates correctly', async () => { - const tableFirstDateElement = (await root.getAllByTestId('fleet-table-date'))[0]; - expect(tableFirstDateElement.innerHTML).toBe(format(timestamp, 'MMM dd yyyy hh:mm aaa')); - }); - - it('shows the correct number of rows', () => { - const allRows = root.container.querySelectorAll('.MuiDataGrid-row').length; - expect(allRows).toBe(100); - }); - - it('shows titles correctly', () => { - expect(screen.queryByText('Fleet')).toBeTruthy(); - expect(screen.queryByText('Robot')).toBeTruthy(); - expect(screen.queryByText('Battery')).toBeTruthy(); - expect(screen.queryByText('Mode')).toBeTruthy(); - expect(screen.queryByText('Model')).toBeTruthy(); - expect(screen.queryByText('TaskID')).toBeTruthy(); - expect(screen.queryByText('Timestamp')).toBeTruthy(); - }); - - it('executes the addMoreRows', () => { - const nextPageButton = screen.queryByTitle('Go to next page'); - nextPageButton && userEvent.click(nextPageButton); - expect(mockAddMoreRows).toHaveBeenCalled(); - }); -}); diff --git a/packages/react-components/lib/reports/fleet-state/fleet-state-report-table.tsx b/packages/react-components/lib/reports/fleet-state/fleet-state-report-table.tsx deleted file mode 100644 index c19a332b2..000000000 --- a/packages/react-components/lib/reports/fleet-state/fleet-state-report-table.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import React from 'react'; -import { DataGrid, GridRenderCellParams } from '@mui/x-data-grid'; -import { Typography } from '@mui/material'; -import { DefaultLogTableProps } from '../default-report-interface'; -import { format } from 'date-fns'; - -export type FleetStateRowsType = { - created: string; //date - fleet: { id: number; name: string }; - robot: { id: number; name: string; model?: string }; - robot_battery_percent: string; - robot_location: string; - robot_mode: string; - robot_seq: number; - robot_task_id: string; -}[]; - -export interface FleetStateReportTable extends DefaultLogTableProps { - rows: FleetStateRowsType | []; -} - -export const FleetStateReportTable = (props: FleetStateReportTable): React.ReactElement => { - const { rows, addMoreRows } = props; - - return ( -
- r.robot.id} - columns={[ - { - headerName: 'Fleet', - field: 'fleet_name', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.fleet.name}; - }, - }, - { - headerName: 'Robot', - field: 'robot_name', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.robot.name}; - }, - }, - { - headerName: 'Battery', - field: 'robot_battery_percent', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.robot_battery_percent}; - }, - }, - { - headerName: 'Mode', - field: 'robot_mode', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.robot_mode}; - }, - }, - { - headerName: 'Model', - field: 'robot_model', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.robot.model}; - }, - }, - { - headerName: 'TaskID', - field: 'robot_task_id', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.robot_task_id}; - }, - }, - { - headerName: 'Timestamp', - field: 'created', - type: 'datetime', - filterable: false, - align: 'center', - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {format(new Date(rowData.value as number), 'MMM dd yyyy hh:mm aaa')} - - ); - }, - }, - ]} - rows={rows} - pageSize={100} - rowsPerPageOptions={[50, 100]} - onPageChange={() => { - if (addMoreRows) { - addMoreRows(); - } - }} - disableColumnMenu={true} - /> -
- ); -}; diff --git a/packages/react-components/lib/reports/fleet-state/fleet-state-report.spec.tsx b/packages/react-components/lib/reports/fleet-state/fleet-state-report.spec.tsx deleted file mode 100644 index 7acdd96c6..000000000 --- a/packages/react-components/lib/reports/fleet-state/fleet-state-report.spec.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { render, screen, waitFor } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { TestLocalizationProvider } from '../../test/locale'; -import { getFleetLogs, reportConfigProps } from '../utils.spec'; -import { FleetStateReport } from './fleet-state-report'; - -const getLogsPromise = async () => getFleetLogs(); - -it('smoke test', async () => { - await waitFor(() => { - render(); - }); -}); - -it('doesn`t shows the table when logs list is empty', async () => { - await waitFor(() => { - render( []} />); - }); - - expect(screen.queryByText('Fleet State')).toBeFalsy(); -}); - -it('calls the retrieve log function when the button is clicked', async () => { - const getLogsPromiseMock = jasmine.createSpy(); - const getLogsPromise = async () => { - getLogsPromiseMock(); - return getFleetLogs(); - }; - render(, { - wrapper: TestLocalizationProvider, - }); - expect(screen.getByRole('button', { name: /Retrieve Logs/i })).toBeTruthy(); - userEvent.click(screen.getByRole('button', { name: /Retrieve Logs/i })); - expect(getLogsPromiseMock).toHaveBeenCalled(); -}); diff --git a/packages/react-components/lib/reports/fleet-state/fleet-state-report.tsx b/packages/react-components/lib/reports/fleet-state/fleet-state-report.tsx deleted file mode 100644 index ebdbbc503..000000000 --- a/packages/react-components/lib/reports/fleet-state/fleet-state-report.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - DefaultReportContainer, - defaultReportClasses, -} from '../default-report-interface'; -import { DefaultDatesForm } from '../default-dates-form'; -import { FleetStateReportTable, FleetStateRowsType } from './fleet-state-report-table'; -import { ReportConfigProps } from '../utils'; - -export interface FleetStateReportProps extends ReportConfigProps { - getLogs: (data: DefaultReportQueryPayload) => Promise; -} - -export const FleetStateReport = (props: FleetStateReportProps): React.ReactElement => { - const { getLogs, ...otherProps } = props; - const [logs, setLogs] = React.useState([]); - const [lastSearchParams, setLastSearchParams] = React.useState({}); - - const searchLogs = async (payload: DefaultReportQueryPayload) => { - setLastSearchParams(payload); - setLogs(await getLogs(payload)); - }; - - const getMoreLogs = async () => { - setLogs(logs.concat(await getLogs({ ...lastSearchParams, offset: logs.length }))); - }; - - return ( - - -
- {logs.length !== 0 && ( - - )} -
-
- ); -}; - -export default FleetStateReport; diff --git a/packages/react-components/lib/reports/fleet-state/index.ts b/packages/react-components/lib/reports/fleet-state/index.ts deleted file mode 100644 index 02939fe93..000000000 --- a/packages/react-components/lib/reports/fleet-state/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './fleet-state-report'; -export * from './fleet-state-report-table'; diff --git a/packages/react-components/lib/reports/health/health-report-table.spec.tsx b/packages/react-components/lib/reports/health/health-report-table.spec.tsx deleted file mode 100644 index e429a4606..000000000 --- a/packages/react-components/lib/reports/health/health-report-table.spec.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { cleanup, render, RenderResult, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { format } from 'date-fns'; -import React from 'react'; -import { getHealthLogs } from '../utils.spec'; -import { HealthReportTable } from './health-report-table'; - -const timestamp = new Date('Mon Jan 1 00:00:02 UTC 2001'); - -describe('Health table test', () => { - let root: RenderResult; - let mockAddMoreRows: ReturnType; - - beforeEach(() => { - mockAddMoreRows = jasmine.createSpy(); - root = render(); - }); - - afterEach(cleanup); - - it('formats dates correctly', async () => { - const tableFirstDateElement = (await root.getAllByTestId('health-table-date'))[0]; - expect(tableFirstDateElement.innerHTML).toBe(format(timestamp, 'MMM dd yyyy hh:mm aaa')); - }); - - it('shows the correct number of rows', () => { - const allRows = root.container.querySelectorAll('.MuiDataGrid-row').length; - expect(allRows).toBe(100); - }); - - it('shows titles correctly', () => { - expect(screen.queryByText('Device')).toBeTruthy(); - expect(screen.queryByText('Actor')).toBeTruthy(); - expect(screen.queryByText('Health Status')).toBeTruthy(); - expect(screen.queryByText('Health Message')).toBeTruthy(); - expect(screen.queryByText('Timestamp')).toBeTruthy(); - }); - - it('executes the addMoreRows', () => { - const nextPageButton = screen.queryByTitle('Go to next page'); - nextPageButton && userEvent.click(nextPageButton); - expect(mockAddMoreRows).toHaveBeenCalled(); - }); -}); diff --git a/packages/react-components/lib/reports/health/health-report-table.tsx b/packages/react-components/lib/reports/health/health-report-table.tsx deleted file mode 100644 index a44ec10fe..000000000 --- a/packages/react-components/lib/reports/health/health-report-table.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import React from 'react'; -import { DataGrid, GridRenderCellParams } from '@mui/x-data-grid'; -import { Typography } from '@mui/material'; -import { DefaultLogTableProps } from '../default-report-interface'; -import { format } from 'date-fns'; - -export type HealthRowsType = { - created: string; //date - device: { id?: number; type: string; actor: string }; - health_status: string; - health_message: string; -}[]; - -export interface HealthReportTable extends DefaultLogTableProps { - rows: HealthRowsType | []; -} - -export const HealthReportTable = (props: HealthReportTable): React.ReactElement => { - const { rows, addMoreRows } = props; - - return ( -
- r.device.id} - columns={[ - { - headerName: 'Device', - field: 'device', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.device.type}; - }, - }, - { - headerName: 'Actor', - field: 'actor_id', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.device.actor}; - }, - }, - { - headerName: 'Health Status', - field: 'health_status', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.health_status}; - }, - }, - { - headerName: 'Health Message', - field: 'health_message', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.health_message}; - }, - }, - { - headerName: 'Timestamp', - field: 'created', - type: 'datetime', - filterable: false, - align: 'center', - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {format(new Date(rowData.value as number), 'MMM dd yyyy hh:mm aaa')} - - ); - }, - }, - ]} - rows={rows} - pageSize={100} - rowsPerPageOptions={[50, 100]} - onPageChange={() => { - if (addMoreRows) { - addMoreRows(); - } - }} - disableColumnMenu={true} - /> -
- ); -}; diff --git a/packages/react-components/lib/reports/health/health-report.spec.tsx b/packages/react-components/lib/reports/health/health-report.spec.tsx deleted file mode 100644 index 8d9ac27c2..000000000 --- a/packages/react-components/lib/reports/health/health-report.spec.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { render, screen, waitFor } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { TestLocalizationProvider } from '../../test/locale'; -import { getHealthLogs, reportConfigProps } from '../utils.spec'; -import { HealthReport } from './health-report'; - -const getLogsPromise = async () => getHealthLogs(); - -it('smoke test', async () => { - await waitFor(() => { - render(); - }); -}); - -it('doesn`t shows the table when logs list is empty', async () => { - await waitFor(() => { - render( await []} />); - }); - - expect(screen.queryByText('Health')).toBeFalsy(); -}); - -it('calls the retrieve log function when the button is clicked', async () => { - const getLogsPromiseMock = jasmine.createSpy(); - const getLogsPromise = async () => { - getLogsPromiseMock(); - return getHealthLogs(); - }; - render(, { - wrapper: TestLocalizationProvider, - }); - expect(screen.getByRole('button', { name: /Retrieve Logs/i })).toBeTruthy(); - userEvent.click(screen.getByRole('button', { name: /Retrieve Logs/i })); - expect(getLogsPromiseMock).toHaveBeenCalled(); -}); diff --git a/packages/react-components/lib/reports/health/health-report.tsx b/packages/react-components/lib/reports/health/health-report.tsx deleted file mode 100644 index 3ea2142f0..000000000 --- a/packages/react-components/lib/reports/health/health-report.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - defaultReportClasses, - DefaultReportContainer, -} from '../default-report-interface'; -import { DefaultDatesForm } from '../default-dates-form'; -import { HealthReportTable, HealthRowsType } from './health-report-table'; -import { ReportConfigProps } from '../utils'; - -export interface HealthReportProps extends ReportConfigProps { - getLogs: (data: DefaultReportQueryPayload) => Promise; -} - -export const HealthReport = (props: HealthReportProps): React.ReactElement => { - const { getLogs, ...otherProps } = props; - const [logs, setLogs] = React.useState([]); - const [lastSearchParams, setLastSearchParams] = React.useState({}); - - const searchLogs = async (payload: DefaultReportQueryPayload) => { - setLastSearchParams(payload); - setLogs(await getLogs(payload)); - }; - - const getMoreLogs = async () => { - setLogs(logs.concat(await getLogs({ ...lastSearchParams, offset: logs.length }))); - }; - - return ( - - -
- {logs.length !== 0 && ( - - )} -
-
- ); -}; - -export default HealthReport; diff --git a/packages/react-components/lib/reports/health/index.ts b/packages/react-components/lib/reports/health/index.ts deleted file mode 100644 index bfbe0ebbe..000000000 --- a/packages/react-components/lib/reports/health/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './health-report'; -export * from './health-report-table'; diff --git a/packages/react-components/lib/reports/index.ts b/packages/react-components/lib/reports/index.ts deleted file mode 100644 index 752b658bd..000000000 --- a/packages/react-components/lib/reports/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -export * from './log-management'; -export * from './multi-level-menu'; -export * from './default-dates-form'; -export * from './default-report-interface'; -export * from './dispenser-state'; -export * from './door-state'; -export * from './fleet-state'; -export * from './health'; -export * from './ingestor-state'; -export * from './lift-state'; -export * from './user-report'; -export * from './task-summary'; -export * from './utils'; diff --git a/packages/react-components/lib/reports/ingestor-state/index.ts b/packages/react-components/lib/reports/ingestor-state/index.ts deleted file mode 100644 index a899427b2..000000000 --- a/packages/react-components/lib/reports/ingestor-state/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './ingestor-state-report'; -export * from './ingestor-state-report-table'; diff --git a/packages/react-components/lib/reports/ingestor-state/ingestor-state-report-table.spec.tsx b/packages/react-components/lib/reports/ingestor-state/ingestor-state-report-table.spec.tsx deleted file mode 100644 index b9d5cc5fd..000000000 --- a/packages/react-components/lib/reports/ingestor-state/ingestor-state-report-table.spec.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { cleanup, render, RenderResult, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { format } from 'date-fns'; -import React from 'react'; -import { getIngestorLogs } from '../utils.spec'; -import { IngestorStateReportTable } from './ingestor-state-report-table'; - -const timestamp = new Date('Mon Jan 1 00:00:02 UTC 2001'); - -describe('Ingestor table test', () => { - let root: RenderResult; - let mockAddMoreRows: ReturnType; - - beforeEach(() => { - mockAddMoreRows = jasmine.createSpy(); - root = render( - , - ); - }); - - afterEach(cleanup); - - it('formats dates correctly', async () => { - const tableFirstDateElement = (await root.getAllByTestId('ingestor-table-date'))[0]; - expect(tableFirstDateElement.innerHTML).toBe(format(timestamp, 'MMM dd yyyy hh:mm aaa')); - }); - - it('shows the correct number of rows', () => { - const allRows = root.container.querySelectorAll('.MuiDataGrid-row').length; - expect(allRows).toBe(100); - }); - - it('shows titles correctly', () => { - expect(screen.queryByText('Guid')).toBeTruthy(); - expect(screen.queryByText('State')).toBeTruthy(); - expect(screen.queryByText('Timestamp')).toBeTruthy(); - }); - - it('executes the addMoreRows', () => { - const nextPageButton = screen.queryByTitle('Go to next page'); - nextPageButton && userEvent.click(nextPageButton); - expect(mockAddMoreRows).toHaveBeenCalled(); - }); -}); diff --git a/packages/react-components/lib/reports/ingestor-state/ingestor-state-report-table.tsx b/packages/react-components/lib/reports/ingestor-state/ingestor-state-report-table.tsx deleted file mode 100644 index 565b40582..000000000 --- a/packages/react-components/lib/reports/ingestor-state/ingestor-state-report-table.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React from 'react'; -import { DataGrid, GridRenderCellParams } from '@mui/x-data-grid'; -import { Typography } from '@mui/material'; -import { DefaultLogTableProps } from '../default-report-interface'; -import { format } from 'date-fns'; - -export type IngestorStateRowsType = { - created: string; //date - guid: string; - state: string; -}[]; - -export interface IngestorStateReportTable extends DefaultLogTableProps { - rows: IngestorStateRowsType | []; -} - -export const IngestorStateReportTable = (props: IngestorStateReportTable): React.ReactElement => { - const { rows, addMoreRows } = props; - - return ( -
- r.guid} - columns={[ - { - headerName: 'Guid', - field: 'guid', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.guid}; - }, - }, - { - headerName: 'State', - field: 'state', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.state}; - }, - }, - { - headerName: 'Timestamp', - field: 'created', - type: 'datetime', - filterable: false, - align: 'center', - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {format(new Date(rowData.value as number), 'MMM dd yyyy hh:mm aaa')} - - ); - }, - }, - ]} - rows={rows} - pageSize={100} - rowsPerPageOptions={[50, 100]} - onPageChange={() => { - if (addMoreRows) { - addMoreRows(); - } - }} - disableColumnMenu={true} - /> -
- ); -}; diff --git a/packages/react-components/lib/reports/ingestor-state/ingestor-state-report.spec.tsx b/packages/react-components/lib/reports/ingestor-state/ingestor-state-report.spec.tsx deleted file mode 100644 index f46ea6926..000000000 --- a/packages/react-components/lib/reports/ingestor-state/ingestor-state-report.spec.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { render, screen, waitFor } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { TestLocalizationProvider } from '../../test/locale'; -import { getIngestorLogs, reportConfigProps } from '../utils.spec'; -import { IngestorStateReport } from './ingestor-state-report'; - -const getLogsPromise = async () => getIngestorLogs(); - -it('smoke test', async () => { - await waitFor(() => { - render(); - }); -}); - -it('doesn`t shows the table when logs list is empty', async () => { - await waitFor(() => { - render( []} />); - }); - - expect(screen.queryByText('Ingestor State')).toBeFalsy(); -}); - -it('calls the retrieve log function when the button is clicked', async () => { - const getLogsPromiseMock = jasmine.createSpy(); - const getLogsPromise = async () => { - getLogsPromiseMock(); - return getIngestorLogs(); - }; - render(, { - wrapper: TestLocalizationProvider, - }); - expect(screen.getByRole('button', { name: /Retrieve Logs/i })).toBeTruthy(); - userEvent.click(screen.getByRole('button', { name: /Retrieve Logs/i })); - expect(getLogsPromiseMock).toHaveBeenCalled(); -}); diff --git a/packages/react-components/lib/reports/ingestor-state/ingestor-state-report.tsx b/packages/react-components/lib/reports/ingestor-state/ingestor-state-report.tsx deleted file mode 100644 index a85c0192e..000000000 --- a/packages/react-components/lib/reports/ingestor-state/ingestor-state-report.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - defaultReportClasses, - DefaultReportContainer, -} from '../default-report-interface'; -import { DefaultDatesForm } from '../default-dates-form'; -import { IngestorStateReportTable, IngestorStateRowsType } from './ingestor-state-report-table'; -import { ReportConfigProps } from '../utils'; - -export interface IngestorStateReportProps extends ReportConfigProps { - getLogs: (data: DefaultReportQueryPayload) => Promise; -} - -export const IngestorStateReport = (props: IngestorStateReportProps): React.ReactElement => { - const { getLogs, ...otherProps } = props; - const [logs, setLogs] = React.useState([]); - const [lastSearchParams, setLastSearchParams] = React.useState({}); - - const searchLogs = async (payload: DefaultReportQueryPayload) => { - setLastSearchParams(payload); - setLogs(await getLogs(payload)); - }; - - const getMoreLogs = async () => { - setLogs(logs.concat(await getLogs({ ...lastSearchParams, offset: logs.length }))); - }; - - return ( - - -
- {logs.length !== 0 && ( - - )} -
-
- ); -}; - -export default IngestorStateReport; diff --git a/packages/react-components/lib/reports/lift-state/index.ts b/packages/react-components/lib/reports/lift-state/index.ts deleted file mode 100644 index aea8be4ac..000000000 --- a/packages/react-components/lib/reports/lift-state/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './lift-state-report'; -export * from './lift-state-report-table'; diff --git a/packages/react-components/lib/reports/lift-state/lift-state-report-table.spec.tsx b/packages/react-components/lib/reports/lift-state/lift-state-report-table.spec.tsx deleted file mode 100644 index b3d0e7667..000000000 --- a/packages/react-components/lib/reports/lift-state/lift-state-report-table.spec.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { cleanup, render, RenderResult, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { format } from 'date-fns'; -import React from 'react'; -import { getLiftLogs } from '../utils.spec'; -import { LiftStateReportTable } from './lift-state-report-table'; - -const timestamp = new Date('Mon Jan 1 00:00:02 UTC 2001'); - -describe('Lift table test', () => { - let mockAddMoreRows: ReturnType; - let root: RenderResult; - - beforeEach(() => { - mockAddMoreRows = jasmine.createSpy(); - root = render(); - }); - - afterEach(cleanup); - - it('formats dates correctly', async () => { - const tableFirstDateElement = (await root.getAllByTestId('lift-table-date'))[0]; - expect(tableFirstDateElement.innerHTML).toBe(format(timestamp, 'MMM dd yyyy hh:mm aaa')); - }); - - it('shows the correct number of rows', () => { - const allRows = root.container.querySelectorAll('.MuiDataGrid-row').length; - // -3. from the tr of the table header, filter and pagination table - expect(allRows).toBe(100); - }); - - it('shows titles correctly', () => { - expect(screen.queryByText('State')).toBeTruthy(); - expect(screen.queryByText('Door State')).toBeTruthy(); - expect(screen.queryByText('Destination Floor')).toBeTruthy(); - expect(screen.queryByText('Motion State')).toBeTruthy(); - expect(screen.queryByText('Current Floor')).toBeTruthy(); - expect(screen.queryByText('Session ID')).toBeTruthy(); - expect(screen.queryByText('Timestamp')).toBeTruthy(); - }); - - it('executes the addMoreRows', () => { - const nextPageButton = screen.queryByTitle('Go to next page'); - nextPageButton && userEvent.click(nextPageButton); - expect(mockAddMoreRows).toHaveBeenCalled(); - }); -}); diff --git a/packages/react-components/lib/reports/lift-state/lift-state-report-table.tsx b/packages/react-components/lib/reports/lift-state/lift-state-report-table.tsx deleted file mode 100644 index 41f6b51f9..000000000 --- a/packages/react-components/lib/reports/lift-state/lift-state-report-table.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import React from 'react'; -import { DataGrid, GridRenderCellParams } from '@mui/x-data-grid'; -import { Typography } from '@mui/material'; -import { DefaultLogTableProps } from '../default-report-interface'; -import { format } from 'date-fns'; - -export type LiftStateRowsType = { - created: string; //date - state: string; - lift?: { id: number; name: string }; - door_state: string; - destination_floor: string; - motion_state: string; - current_floor: string; - session_id: string; -}[]; - -export interface LiftStateReportTable extends DefaultLogTableProps { - rows: LiftStateRowsType | []; -} - -export const LiftStateReportTable = (props: LiftStateReportTable): React.ReactElement => { - const { rows, addMoreRows } = props; - - return ( -
- r.lift.id} - columns={[ - { - headerName: 'Session ID', - field: 'session_id', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.session_id}; - }, - }, - { - headerName: 'State', - field: 'state', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.state}; - }, - }, - { - headerName: 'Door State', - field: 'door_state', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.door_state}; - }, - }, - { - headerName: 'Destination Floor', - field: 'destination_floor', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.destination_floor}; - }, - }, - { - headerName: 'Motion State', - field: 'motion_state', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.motion_state}; - }, - }, - { - headerName: 'Current Floor', - field: 'current_floor', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.current_floor}; - }, - }, - - { - headerName: 'Timestamp', - field: 'created', - type: 'datetime', - filterable: false, - align: 'center', - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {format(new Date(rowData.value as number), 'MMM dd yyyy hh:mm aaa')} - - ); - }, - }, - ]} - rows={rows} - pageSize={100} - rowsPerPageOptions={[50, 100]} - onPageChange={() => { - if (addMoreRows) { - addMoreRows(); - } - }} - disableColumnMenu={true} - /> -
- ); -}; diff --git a/packages/react-components/lib/reports/lift-state/lift-state-report.spec.tsx b/packages/react-components/lib/reports/lift-state/lift-state-report.spec.tsx deleted file mode 100644 index 917e380f1..000000000 --- a/packages/react-components/lib/reports/lift-state/lift-state-report.spec.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { render, screen, waitFor } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { TestLocalizationProvider } from '../../test/locale'; -import { getLiftLogs, reportConfigProps } from '../utils.spec'; -import { LiftStateReport } from './lift-state-report'; - -const getLogsPromise = async () => getLiftLogs(); - -it('smoke test', async () => { - await waitFor(() => { - render(); - }); -}); - -it('doesn`t shows the table when logs list is empty', async () => { - await waitFor(() => { - render( []} />); - }); - - expect(screen.queryByText('Lift State')).toBeFalsy(); -}); - -it('calls the retrieve log function when the button is clicked', async () => { - const getLogsPromiseMock = jasmine.createSpy(); - const getLogsPromise = async () => { - getLogsPromiseMock(); - return getLiftLogs(); - }; - render(, { - wrapper: TestLocalizationProvider, - }); - expect(screen.getByRole('button', { name: /Retrieve Logs/i })).toBeTruthy(); - userEvent.click(screen.getByRole('button', { name: /Retrieve Logs/i })); - expect(getLogsPromiseMock).toHaveBeenCalled(); -}); diff --git a/packages/react-components/lib/reports/lift-state/lift-state-report.tsx b/packages/react-components/lib/reports/lift-state/lift-state-report.tsx deleted file mode 100644 index b7ae86377..000000000 --- a/packages/react-components/lib/reports/lift-state/lift-state-report.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - defaultReportClasses, - DefaultReportContainer, -} from '../default-report-interface'; -import { DefaultDatesForm } from '../default-dates-form'; -import { LiftStateReportTable, LiftStateRowsType } from './lift-state-report-table'; -import { ReportConfigProps } from '../utils'; - -export interface LiftStateReportProps extends ReportConfigProps { - getLogs: (data: DefaultReportQueryPayload) => Promise; -} - -export const LiftStateReport = (props: LiftStateReportProps): React.ReactElement => { - const { getLogs, ...otherProps } = props; - const [logs, setLogs] = React.useState([]); - const [lastSearchParams, setLastSearchParams] = React.useState({}); - - const searchLogs = async (payload: DefaultReportQueryPayload) => { - setLastSearchParams(payload); - setLogs(await getLogs(payload)); - }; - - const getMoreLogs = async () => { - setLogs(logs.concat(await getLogs({ ...lastSearchParams, offset: logs.length }))); - }; - - return ( - - -
- {logs.length !== 0 && ( - - )} -
-
- ); -}; - -export default LiftStateReport; diff --git a/packages/react-components/lib/reports/log-management/custom-lookup-filter.spec.tsx b/packages/react-components/lib/reports/log-management/custom-lookup-filter.spec.tsx deleted file mode 100644 index ec79b17f3..000000000 --- a/packages/react-components/lib/reports/log-management/custom-lookup-filter.spec.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { cleanup, render, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { CustomLookupFilter } from './custom-lookup-filter'; - -describe('Custom Lookup filter', () => { - let mockOnChange: ReturnType; - beforeEach(() => { - mockOnChange = jasmine.createSpy(); - }); - - afterEach(() => { - cleanup(); - }); - - it('triggers a new search closing the filter selector', () => { - render( - , - ); - - // click on existing selected filter "error" to open up input to expose "warn" - userEvent.click(screen.getByText('error')); - userEvent.click(screen.getByText('warn')); - userEvent.type(screen.getByText('warn'), '{esc}'); - expect(mockOnChange).toHaveBeenCalled(); - }); -}); diff --git a/packages/react-components/lib/reports/log-management/custom-lookup-filter.tsx b/packages/react-components/lib/reports/log-management/custom-lookup-filter.tsx deleted file mode 100644 index c4c8af59b..000000000 --- a/packages/react-components/lib/reports/log-management/custom-lookup-filter.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { - Checkbox, - FormControl, - Input, - InputLabel, - ListItemText, - MenuItem, - Select, -} from '@mui/material'; -import React from 'react'; - -const ITEM_HEIGHT = 48; -const ITEM_PADDING_TOP = 8; -const MenuProps = { - PaperProps: { - style: { - maxHeight: ITEM_HEIGHT * 7 + ITEM_PADDING_TOP, - width: 250, - }, - }, -}; - -export interface CustomLookupFilterProps { - lookup: Record; - selectedFilter: string[]; - onFilterChange: React.Dispatch>; -} - -export const CustomLookupFilter = (props: CustomLookupFilterProps): React.ReactElement => { - // FIXME - select closes every time a filter param is selected, which is bad for ux - const { lookup, selectedFilter, onFilterChange } = props; - return ( - - Level Filter - } - renderValue={(selecteds) => - (selecteds as string[]).map((selected: string) => lookup[selected]).join(', ') - } - MenuProps={MenuProps} - style={{ marginTop: 0 }} - > - {Object.keys(lookup).map((key: string) => ( - - -1} /> - - - ))} - - - ); -}; diff --git a/packages/react-components/lib/reports/log-management/index.ts b/packages/react-components/lib/reports/log-management/index.ts deleted file mode 100644 index ca7102e01..000000000 --- a/packages/react-components/lib/reports/log-management/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './log-table'; -export * from './search-log-form'; -export * from './log-level'; -export * from './log-management'; diff --git a/packages/react-components/lib/reports/log-management/log-level.ts b/packages/react-components/lib/reports/log-management/log-level.ts deleted file mode 100644 index e1e7679da..000000000 --- a/packages/react-components/lib/reports/log-management/log-level.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Order by severity - */ - -export enum LogLevel { - Fatal = 'fatal', - Error = 'error', - Warn = 'warn', - Info = 'info', - Debug = 'debug', - Trace = 'trace', - All = 'all', -} diff --git a/packages/react-components/lib/reports/log-management/log-management.spec.tsx b/packages/react-components/lib/reports/log-management/log-management.spec.tsx deleted file mode 100644 index 3f834a572..000000000 --- a/packages/react-components/lib/reports/log-management/log-management.spec.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { render, waitFor } from '@testing-library/react'; -import React from 'react'; -import { LogManagement } from './log-management'; -import { LogRowsType } from './log-table'; -import { TestLocalizationProvider } from '../../test/locale'; - -const getLogLabels = () => [ - { label: 'Web Server', value: 'web-server' }, - { label: 'RMF core', value: 'rmf-core' }, -]; - -const getLogs = () => { - const rows: LogRowsType = []; - for (let i = 0; i < 200; i++) { - rows.push({ - message: 'Test' + i, - level: 'WARN', - created: new Date('Mon Jan 1 00:00:02 UTC 2001').toISOString(), - container: { id: i, name: 'container' }, - }); - } - return rows; -}; - -const getLogsPromise = async () => await getLogs(); -const getLabelsPromise = async () => await getLogLabels(); - -it('smoke test', async () => { - // Added the waitFor because this component is updating a state inside a useEffect. - await waitFor(() => { - render(, { - wrapper: TestLocalizationProvider, - }); - }); -}); diff --git a/packages/react-components/lib/reports/log-management/log-management.tsx b/packages/react-components/lib/reports/log-management/log-management.tsx deleted file mode 100644 index e139f1f74..000000000 --- a/packages/react-components/lib/reports/log-management/log-management.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React from 'react'; -import { styled } from '@mui/material'; -import { SearchLogForm } from './search-log-form'; -import { LogRowsType, LogTable } from './log-table'; - -const classes = { - table: 'log-management-table', - background: 'log-management-background', -}; -const StyledDiv = styled('div')(({ theme }) => ({ - [`&.${classes.background}`]: { - backgroundColor: theme.palette.background.paper, - }, - [`& .${classes.table}`]: { - overflowY: 'scroll', - paddingTop: '20px', - }, -})); - -export interface LogQueryPayload { - toLogDate?: unknown | null; - fromLogDate?: unknown | null; - logLabel?: string | null; - logLevel?: string | null; - offset?: number | null; -} - -export interface LogManagementProps { - getLogs: (data: LogQueryPayload) => Promise; - getLabels: () => Promise<{ label: string; value: string }[]>; -} - -export const LogManagement = (props: LogManagementProps): React.ReactElement => { - const { getLogs, getLabels } = props; - const [logs, setLogs] = React.useState([]); - const [logLabels, setLogLabels] = React.useState<{ label: string; value: string }[]>([]); - const [lastSearchParams, setLastSearchParams] = React.useState({}); - - React.useEffect(() => { - const getLogLabels = async () => { - const labels = await getLabels(); - setLogLabels(labels); - }; - getLogLabels(); - }, [getLabels]); - - const searchLogs = async (payload: LogQueryPayload) => { - setLastSearchParams(payload); - setLogs(await getLogs(payload)); - }; - - const getMoreLogs = async () => { - setLogs(logs.concat(await getLogs({ ...lastSearchParams, offset: logs.length }))); - }; - - return ( - - -
- {logs.length !== 0 && } -
-
- ); -}; diff --git a/packages/react-components/lib/reports/log-management/log-table.spec.tsx b/packages/react-components/lib/reports/log-management/log-table.spec.tsx deleted file mode 100644 index ba71a469a..000000000 --- a/packages/react-components/lib/reports/log-management/log-table.spec.tsx +++ /dev/null @@ -1,118 +0,0 @@ -import { cleanup, render, RenderResult, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { format } from 'date-fns'; -import React from 'react'; -import { LogLevel } from './log-level'; -import { LogRowsType, LogTable } from './log-table'; - -const rows = [] as LogRowsType; - -const logLevels = Object.values(LogLevel); - -const getRandomLogLevel = () => { - const number = Math.floor(Math.random() * logLevels.length); - return logLevels[number]; -}; - -const timestamp = new Date('Mon Jan 1 00:00:02 UTC 2001'); - -for (let i = 0; i < 110; i++) { - rows.push({ - message: 'Test' + i, - level: getRandomLogLevel().toUpperCase(), - created: format(timestamp, 'MMM dd yyyy hh:mm aaa'), - container: { id: i, name: 'container' }, - }); -} - -describe('Log table test', () => { - let root: RenderResult; - beforeEach(() => { - root = render(); - }); - - afterEach(cleanup); - - it('formats dates correctly', async () => { - const tableFirstDateElement = (await root.getAllByTestId('log-table-date'))[0]; - expect(tableFirstDateElement.innerHTML).toBe(format(timestamp, 'MMM dd yyyy hh:mm aaa')); - }); - - it('shows the correct number of rows', () => { - const allRows = root.container.querySelectorAll('.MuiDataGrid-row').length; - expect(allRows).toBe(100); - }); -}); - -describe('Table footer Pagination', () => { - beforeEach(() => { - render(); - }); - - afterEach(cleanup); - - it('show the correct number of rows per page', () => { - // NOTE: mui v5 is using the unicode char '–', different from '-'!! - expect(screen.getByText('1–100 of 110')).toBeTruthy(); - }); - - it('can change the rows per page', async () => { - userEvent.click(screen.getByText('100')); - userEvent.click(screen.getByText('50')); - - // NOTE: mui v5 is using the unicode char '–', different from '-'!! - expect(await screen.getByText('1–50 of 110')).toBeTruthy(); - }); - - it('advance page when the `Next Page` button is clicked ', async () => { - const nextPageButton = screen.queryByLabelText('Go to next page'); - nextPageButton && userEvent.click(nextPageButton); - // NOTE: mui v5 is using the unicode char '–', different from '-'!! - expect(screen.getByText('101–110 of 110')).toBeTruthy(); - }); - - it('goes to previous page when the `Previous page` button is clicked ', () => { - const nextPageButton = screen.queryByLabelText('Go to next page'); - nextPageButton && userEvent.click(nextPageButton); - // NOTE: mui v5 is using the unicode char '–', different from '-'!! - expect(screen.getByText('101–110 of 110')).toBeTruthy(); - - const previousPageButton = screen.queryByLabelText('Go to previous page'); - previousPageButton && userEvent.click(previousPageButton); - // NOTE: mui v5 is using the unicode char '–', different from '-'!! - expect(screen.getByText('1–100 of 110')).toBeTruthy(); - }); -}); - -describe('Applies styles to labels correctly', () => { - const styleRows = [] as LogRowsType; - - for (let i = 0; i < logLevels.length; i++) { - styleRows.push({ - message: 'Test' + i, - level: logLevels[i].toUpperCase(), - created: format(timestamp, 'MMM dd yyyy hh:mm aaa'), - container: { id: i, name: 'container' }, - }); - } - - beforeEach(() => { - render(); - }); - - it('set the style correctly when the label ERROR ', () => { - expect(screen.getByText('ERROR').className).toContain('log-table-error'); - }); - - it('set the style correctly when the label DEBUG ', () => { - expect(screen.getByText('DEBUG').className).toContain('log-table-debug'); - }); - - it('set the style correctly when the label WARN ', () => { - expect(screen.getByText('WARN').className).toContain('log-table-warn'); - }); - - it('set the style correctly when the label FATAL ', () => { - expect(screen.getByText('FATAL').className).toContain('log-table-error'); - }); -}); diff --git a/packages/react-components/lib/reports/log-management/log-table.tsx b/packages/react-components/lib/reports/log-management/log-table.tsx deleted file mode 100644 index 54b4ecc42..000000000 --- a/packages/react-components/lib/reports/log-management/log-table.tsx +++ /dev/null @@ -1,176 +0,0 @@ -import React from 'react'; -import { DataGrid, GridRenderCellParams } from '@mui/x-data-grid'; -import { LogLevel } from '.'; -import { Typography, styled } from '@mui/material'; -import { format } from 'date-fns'; -import { CustomLookupFilter } from './custom-lookup-filter'; - -export type ContainerType = { - id: number; - name: string; -}; - -export type LogRowsType = { - level: string; - message: string; - created: string; - container: ContainerType; -}[]; - -export interface LogTableProps { - rows: LogRowsType | []; - addMoreRows?(): void; -} - -const classes = { - error: 'log-table-error', - debug: 'log-table-debug', - warn: 'log-table-warn', - info: 'log-table-info', - cellContent: 'log-table-cell-content', -}; -const StyledDiv = styled('div')(({ theme }) => ({ - [`& .${classes.error}`]: { - color: theme.palette.error.main, - }, - [`& .${classes.debug}`]: { - color: theme.palette.secondary.dark, - }, - [`& .${classes.warn}`]: { - color: theme.palette.warning.light, - }, - [`& .${classes.info}`]: { - color: theme.palette.info.main, - }, - [`& .${classes.cellContent}`]: { - display: 'block', - marginBlockStart: '1em', - marginBlockEnd: '1em', - marginInlineStart: '0px', - marginInlineEnd: '0px', - }, -})); - -export const LogTable = (props: LogTableProps): React.ReactElement => { - const { rows, addMoreRows } = props; - const [pageSize, setPageSize] = React.useState(100); - const getLogLevelStyle = (level: string): string | undefined => { - level = level.toLowerCase(); - switch (level) { - case LogLevel.Error: - return classes.error; - case LogLevel.Warn: - return classes.warn; - case LogLevel.Fatal: - return classes.error; - case LogLevel.Debug: - return classes.debug; - case LogLevel.Info: - return classes.info; - default: - return undefined; - } - }; - - const [selectedFilter, setSelectedFilter] = React.useState([]); - // FIXME: we cannot copy the LogLevel Enum directly and remove the all attribute because it has a protected attribute. - const logLevels = React.useMemo(() => { - const logLevelCopy: Record = {}; - Object.keys(LogLevel).forEach((element: string) => { - logLevelCopy[element] = LogLevel[element as keyof typeof LogLevel]; - }); - delete logLevelCopy['All']; - return logLevelCopy; - }, []); - - return ( - - r.container.id} - autoHeight={true} - columns={[ - { - headerName: 'Level', - field: 'level', - type: 'string', - align: 'center', - width: 100, - sortable: false, - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {rowData.row.level} - - ); - }, - }, - { - headerName: 'Container', - field: 'name', - type: 'string', - align: 'center', - width: 120, - sortable: false, - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {rowData.row.container.name ? rowData.row.container.name : 'Unknown'} - - ); - }, - }, - { - headerName: 'Message', - field: 'message', - type: 'string', - width: 1200, - sortable: false, - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.value}; - }, - }, - { - headerName: 'Timestamp', - field: 'created', - type: 'datetime', - filterable: false, - sortable: false, - align: 'center', - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {format(new Date(rowData.value as number), 'MMM dd yyyy hh:mm aaa')} - - ); - }, - }, - ]} - components={{ - Toolbar: () => ( - - ), - }} - rows={rows.filter((row) => { - if (!selectedFilter.includes(row.level)) return row; - })} - pageSize={pageSize} - rowsPerPageOptions={[50, 100]} - onPageChange={() => { - if (addMoreRows) { - addMoreRows(); - } - }} - onPageSizeChange={(pageSize) => { - setPageSize(pageSize); - }} - disableColumnMenu={true} - /> - - ); -}; diff --git a/packages/react-components/lib/reports/log-management/logging.stories.tsx b/packages/react-components/lib/reports/log-management/logging.stories.tsx deleted file mode 100644 index c34541cf0..000000000 --- a/packages/react-components/lib/reports/log-management/logging.stories.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { Meta, Story } from '@storybook/react'; -import React from 'react'; -import { LogManagement } from './log-management'; -import { LogTable } from './log-table'; -import { SearchLogForm } from './search-log-form'; - -export default { - title: 'Logging', - argTypes: {}, -} as Meta; - -const getLogLabels = () => [ - { label: 'Web Server', value: 'web-server' }, - { label: 'RMF core', value: 'rmf-core' }, -]; - -const timestamp = new Date('Mon Jan 1 00:00:02 UTC 2001').toISOString(); - -function randomDate(start: Date, end: Date) { - return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())); -} - -const getLogs = () => { - const rows = []; - for (let i = 0; i < 500; i++) { - rows.push({ - message: 'Test' + i, - level: 'Debug', - created: randomDate(new Date(2012, 0, 1), new Date()).toISOString(), - container: { id: i + 2, name: 'container_test' }, - }); - } - return rows; -}; - -const getLogsPromise = async () => getLogs(); -const getLabelsPromise = async () => getLogLabels(); - -export const LogManagementExample: Story = (args) => ( - -); - -export const SimpleSearchLogForm: Story = (args) => ( - -); - -export const SimpleLogTable: Story = (args) => { - const logs = getLogs(); - logs.unshift({ - message: ` - npm ERR! code ELIFECYCLE - npm ERR! errno 1 - npm ERR! react-components@0.0.1 build: 'npm run lint && tsc --build' - npm ERR! Exit status 1 - npm ERR! - npm ERR! Failed at the react-components@0.0.1 build script. - npm ERR! This is probably not a problem with npm. There is likely additional logging output above. - - npm ERR! A complete log of this run can be found in: - npm ERR! /home/ekumen/.npm/_logs/2021-01-18T21_20_07_480Z-debug.log`, - level: 'Error', - created: timestamp, - container: { id: 1, name: 'container_test' }, - }); - logs.unshift({ - message: `long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long msg`, - level: 'Debug', - created: timestamp, - container: { id: 0, name: 'container_test' }, - }); - - return ; -}; diff --git a/packages/react-components/lib/reports/log-management/search-filter.tsx b/packages/react-components/lib/reports/log-management/search-filter.tsx deleted file mode 100644 index d056f0eec..000000000 --- a/packages/react-components/lib/reports/log-management/search-filter.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react'; -import { - FormControl, - InputLabel, - MenuItem, - Select, - SelectChangeEvent, - styled, -} from '@mui/material'; - -const classes = { - formControl: 'search-filter-formcontrol', -}; -const StyledDiv = styled('div')(({ theme }) => ({ - [`& .${classes.formControl}`]: { - margin: theme.spacing(1), - minWidth: '230px', - }, -})); - -interface SearchFilterProps { - options: { label: string; value: string }[]; - handleOnChange: (event: SelectChangeEvent, child: React.ReactNode) => void; - label: string; - name: string; - currentValue: string | number; -} - -export const SearchFilter = (props: SearchFilterProps): React.ReactElement => { - const { handleOnChange, options, name, label, currentValue } = props; - - return ( - -
- - {label} - - -
-
- ); -}; diff --git a/packages/react-components/lib/reports/log-management/search-log-form.spec.tsx b/packages/react-components/lib/reports/log-management/search-log-form.spec.tsx deleted file mode 100644 index 483468a2d..000000000 --- a/packages/react-components/lib/reports/log-management/search-log-form.spec.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { render } from '@testing-library/react'; -import React from 'react'; -import { TestLocalizationProvider } from '../../test/locale'; -import { SearchLogForm } from './search-log-form'; - -describe('Search log form tests', () => { - const logLabel = [ - { label: 'Web Server', value: 'web-server' }, - { label: 'RMF core', value: 'rmf-core' }, - ]; - - it('smoke test', () => { - render(, { - wrapper: TestLocalizationProvider, - }); - }); -}); diff --git a/packages/react-components/lib/reports/log-management/search-log-form.tsx b/packages/react-components/lib/reports/log-management/search-log-form.tsx deleted file mode 100644 index 0c4e3a3d2..000000000 --- a/packages/react-components/lib/reports/log-management/search-log-form.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import { DateTimePickerProps } from '@mui/lab'; -import DateTimePicker from '@mui/lab/DateTimePicker'; -import { SelectChangeEvent, styled, TextField } from '@mui/material'; -import Button from '@mui/material/Button'; -import React from 'react'; -import { LogQueryPayload } from '.'; -import { LogLevel } from './log-level'; -import { SearchFilter } from './search-filter'; - -interface SearchLogFormProps { - logLabelValues: { label: string; value: string }[]; - search?: (payload: LogQueryPayload) => void; -} - -const classes = { - searchForm: 'search-log-search-from', - searchButton: 'search-log-search-button', - formControl: 'search-log-form-form-control', - background: 'search-log-form-background', -}; -const StyledDiv = styled('div')(({ theme }) => ({ - [`&.${classes.background}`]: { - backgroundColor: theme.palette.background.paper, - }, - [`& .${classes.searchForm}`]: { - display: 'grid', - gridTemplateColumns: '1fr 1fr 1fr 1fr', - alignItems: 'center', - justifyItems: 'center', - }, - [`& .${classes.searchButton}`]: { - width: '100%', - }, - [`& .${classes.formControl}`]: { - margin: theme.spacing(1), - minWidth: 120, - }, -})); - -const logLevelValues = [ - { label: 'ALL', value: LogLevel.All }, - { label: 'FATAL', value: LogLevel.Fatal }, - { label: 'ERROR', value: LogLevel.Error }, - { label: 'WARN', value: LogLevel.Warn }, - { label: 'INFO', value: LogLevel.Info }, - { label: 'DEBUG', value: LogLevel.Debug }, -]; - -export const SearchLogForm = (props: SearchLogFormProps): React.ReactElement => { - const { search, logLabelValues } = props; - // The log contains information from different services, the label help us differentiate the service - const [logLabel, setLogLabel] = React.useState(''); - const [logLevel, setLogLevel] = React.useState(LogLevel.All); - const [fromLogDate, setFromLogDate] = React.useState(new Date()); - const [toLogDate, setToLogDate] = React.useState(new Date()); - - const searchQuery = () => { - search && search({ toLogDate, fromLogDate, logLabel, logLevel }); - }; - - const handleLogLabelChange = React.useCallback((event: SelectChangeEvent) => { - setLogLabel(event.target.value as string); - }, []); - - const handleLogLevelChange = React.useCallback((event: SelectChangeEvent) => { - setLogLevel(event.target.value as LogLevel); - }, []); - - const handleFromLogDateChange: Required['onChange'] = React.useCallback( - (date) => { - setFromLogDate(date); - }, - [], - ); - - const handleToLogDateChange: Required['onChange'] = React.useCallback( - (date) => { - setToLogDate(date); - }, - [], - ); - - return ( - -
- - - - - } - /> - } - /> -
- -

- -
- ); -}; diff --git a/packages/react-components/lib/reports/multi-level-menu.spec.tsx b/packages/react-components/lib/reports/multi-level-menu.spec.tsx deleted file mode 100644 index 08e832101..000000000 --- a/packages/react-components/lib/reports/multi-level-menu.spec.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { cleanup, render, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { ExpandableMultilevelMenuProps, MultiLevelMenu } from './multi-level-menu'; - -describe('Multi level menu', () => { - let buildMenuStructure: ExpandableMultilevelMenuProps[]; - let mockClickAllLogs: ReturnType; - let mockClickRobotStates: ReturnType; - - beforeEach(() => { - mockClickAllLogs = jasmine.createSpy(); - mockClickRobotStates = jasmine.createSpy(); - - const buildReportMenuStructure = (): ExpandableMultilevelMenuProps[] => { - return [ - { - icon:

Mock Icon 1

, - title: 'All logs', - items: [], - onClick: mockClickAllLogs, - }, - { - icon:

Mock Icon 2

, - title: 'Robots', - items: [ - { - title: 'Robot states', - items: [], - onClick: mockClickRobotStates, - }, - ], - }, - ] as ExpandableMultilevelMenuProps[]; - }; - buildMenuStructure = buildReportMenuStructure(); - }); - - afterEach(() => { - cleanup(); - }); - - it('renders correctly with `All logs` and `Robots` titles on the first level', () => { - render(); - expect(screen.getByText('Mock Icon 1')).toBeTruthy(); - expect(screen.getByText('All logs')).toBeTruthy(); - - expect(screen.getByText('Mock Icon 2')).toBeTruthy(); - expect(screen.getByText('Robots')).toBeTruthy(); - - expect(screen.queryByText('Robot states')).toBeFalsy(); - }); - - it('triggers an action, if defined, when clicking on a title ', () => { - render(); - userEvent.click(screen.getByText('All logs')); - expect(mockClickAllLogs).toHaveBeenCalledTimes(1); - }); - - it('shows the child level after clicking the parent level', () => { - render(); - userEvent.click(screen.getByText('Robots')); - expect(screen.getByText('Robot states')).toBeTruthy(); - }); - - it('triggers an action, if defined, after clicking on a child level title', () => { - render(); - userEvent.click(screen.getByText('Robots')); - userEvent.click(screen.getByText('Robot states')); - expect(mockClickRobotStates).toHaveBeenCalledTimes(1); - }); - - it('shows the parent level and the child level titles simultaneously', () => { - render(); - userEvent.click(screen.getByText('Robots')); - screen.getByText('Robot states'); - expect(screen.getByText('Robots')).toBeTruthy(); - expect(screen.getByText('Robot states')).toBeTruthy(); - }); -}); diff --git a/packages/react-components/lib/reports/multi-level-menu.stories.tsx b/packages/react-components/lib/reports/multi-level-menu.stories.tsx deleted file mode 100644 index 21dab7618..000000000 --- a/packages/react-components/lib/reports/multi-level-menu.stories.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import AndroidIcon from '@mui/icons-material/Android'; -import ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp'; -import { styled } from '@mui/material'; -import SearchIcon from '@mui/icons-material/Search'; -import { Meta, Story } from '@storybook/react'; -import React from 'react'; -import { ExpandableMultilevelMenuProps, MultiLevelMenu } from './multi-level-menu'; - -const classes = { - container: 'mlm-story-container', -}; - -const MlmStory = styled('div')(({ theme }) => ({ - [`&.${classes.container}`]: { - backgroundColor: theme.palette.background.paper, - }, -})); - -export default { - title: 'Multi level menu', -} as Meta; - -const menuStructure = [ - { - icon: , - title: 'All logs', - items: [], - }, - { - icon: , - title: 'Robots', - items: [ - { - title: 'Robot states', - items: [], - }, - ], - }, - { - icon: , - title: 'Test', - items: [ - { - title: 'Test-child', - items: [], - }, - ], - }, -] as ExpandableMultilevelMenuProps[]; - -export const MultiLevelMenuStory: Story = (args) => ( - - - -); diff --git a/packages/react-components/lib/reports/multi-level-menu.tsx b/packages/react-components/lib/reports/multi-level-menu.tsx deleted file mode 100644 index 8ade25fbe..000000000 --- a/packages/react-components/lib/reports/multi-level-menu.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import React, { useState } from 'react'; -import { styled, ListProps } from '@mui/material'; -import List from '@mui/material/List'; -import ListItem from '@mui/material/ListItem'; -import ListItemIcon from '@mui/material/ListItemIcon'; -import ListItemText from '@mui/material/ListItemText'; -import Collapse from '@mui/material/Collapse'; -import ExpandLess from '@mui/icons-material/ExpandLess'; -import ExpandMore from '@mui/icons-material/ExpandMore'; - -const classes = { - textAndIcon: 'mlm-text-and-icon', -}; - -const StyledList = styled((props: ListProps) => )(({ theme }) => ({ - [`& .${classes.textAndIcon}`]: { - color: theme.palette.text.primary, - }, -})); - -interface ListItemBodyProps { - icon?: JSX.Element; - title: string; -} - -const ListItemBody = (props: ListItemBodyProps): JSX.Element => { - return ( - <> - {props.icon} - - - ); -}; - -interface MenuItemProps { - icon?: JSX.Element; - title: string; - items?: { - title: string; - to: string; - }[]; - onClick?: () => void; -} - -const MenuItem = React.memo((props: MenuItemProps): JSX.Element => { - return ( - - - - ); -}); - -export interface ExpandableMultilevelMenuProps { - icon?: JSX.Element; - title: string; - items: MenuItemProps[]; - onClick?: () => void; -} - -const ExpandableMenuItem = (props: ExpandableMultilevelMenuProps): JSX.Element => { - const { items, icon, title } = props; - const [open, setOpen] = useState(false); - const handleClick = () => { - setOpen(!open); - }; - - return ( -
- - - {open ? : } - - - - -
- ); -}; - -export interface MultilevelMenuProps { - menuStructure: (ExpandableMultilevelMenuProps | MenuItemProps)[]; -} - -export const MultiLevelMenu = React.memo((props: MultilevelMenuProps): React.ReactElement => { - const createList = (items: (ExpandableMultilevelMenuProps | MenuItemProps)[]) => { - const menu: JSX.Element[] = []; - items.map((menuItem: ExpandableMultilevelMenuProps | MenuItemProps) => { - // If it has children's - if (Array.isArray(menuItem.items) && menuItem.items.length > 0) { - menu.push( - , - ); - } else { - menu.push( - , - ); - } - }); - return menu.concat(); - }; - - return {createList(props.menuStructure)}; -}); diff --git a/packages/react-components/lib/reports/task-summary/index.ts b/packages/react-components/lib/reports/task-summary/index.ts deleted file mode 100644 index ce0aeaab6..000000000 --- a/packages/react-components/lib/reports/task-summary/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './task-summary-report'; -export * from './task-summary-report-table'; diff --git a/packages/react-components/lib/reports/task-summary/task-summary-report-table.spec.tsx b/packages/react-components/lib/reports/task-summary/task-summary-report-table.spec.tsx deleted file mode 100644 index 9e322124e..000000000 --- a/packages/react-components/lib/reports/task-summary/task-summary-report-table.spec.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { cleanup, render, RenderResult, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { format } from 'date-fns'; -import React from 'react'; -import { getTaskSummaryLogs } from '../utils.spec'; -import { TaskSummaryReportTable } from './task-summary-report-table'; - -const timestamp = new Date('Mon Jan 1 00:00:02 UTC 2001'); - -describe('Task Summary Table Test', () => { - let root: RenderResult; - let mockAddMoreRows: ReturnType; - - beforeEach(() => { - mockAddMoreRows = jasmine.createSpy(); - root = render( - , - ); - }); - - afterEach(cleanup); - - it('formats dates correctly', async () => { - const tableFirstDateElement = (await root.getAllByTestId('task-table-date'))[0]; - expect(tableFirstDateElement.innerHTML).toBe(format(timestamp, 'MMM dd yyy hh:mm aaa')); - }); - - it('shows the correct number of rows', () => { - const allRows = root.container.querySelectorAll('.MuiDataGrid-row').length; - expect(allRows).toBe(100); - }); - - it('shows the correct headers', () => { - expect(screen.queryByText('Task ID')).toBeTruthy(); - expect(screen.queryByText('Fleet')).toBeTruthy(); - expect(screen.queryByText('Robot')).toBeTruthy(); - expect(screen.queryByText('Task Description')).toBeTruthy(); - expect(screen.queryByText('State')).toBeTruthy(); - expect(screen.queryByText('Time')).toBeTruthy(); - expect(screen.queryByText('Timestamp')).toBeTruthy(); - }); - - it('executes the addMoreRows function', () => { - const nextPageButton = screen.queryByTitle('Go to next page'); - nextPageButton && userEvent.click(nextPageButton); - expect(mockAddMoreRows).toHaveBeenCalled(); - }); -}); diff --git a/packages/react-components/lib/reports/task-summary/task-summary-report-table.tsx b/packages/react-components/lib/reports/task-summary/task-summary-report-table.tsx deleted file mode 100644 index db1a5a7d6..000000000 --- a/packages/react-components/lib/reports/task-summary/task-summary-report-table.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import React from 'react'; -import { DataGrid, GridRenderCellParams } from '@mui/x-data-grid'; -import type { Time } from 'api-client'; -import { format } from 'date-fns'; -import { Typography } from '@mui/material'; -import { rosTimeToJs } from '../../utils'; -import { DefaultLogTableProps } from '../default-report-interface'; -import { returnTaskDetails } from './utils'; - -export type TaskSummaryRowsType = { - created: string; //date - fleet: { id: number; name: string }; - robot: { id: number; name: string; model?: string }; - task_id: string; - task_profile: any; - state: string; - status: string; - submission_time: Time; - start_time: Time; - end_time: Time; -}[]; - -export interface TaskSummaryReportTable extends DefaultLogTableProps { - rows: TaskSummaryRowsType | []; -} - -export const TaskSummaryReportTable = (props: TaskSummaryReportTable): React.ReactElement => { - const { rows, addMoreRows } = props; - - return ( -
- r.task_id} - columns={[ - { - headerName: 'Task ID', - field: 'task_id', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.task_id}; - }, - }, - { - headerName: 'Fleet', - field: 'fleet_name', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.fleet.name}; - }, - }, - { - headerName: 'Robot', - field: 'robot_name', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.robot.name}; - }, - }, - { - headerName: 'Task Description', - field: 'description', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - const taskTypeDetails = returnTaskDetails( - rowData.row.task_id, - rowData.row.task_profile.description, - ); - return taskTypeDetails; - }, - }, - { - headerName: 'State', - field: 'state', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.state}; - }, - }, - { - headerName: 'Time', - field: 'time_information', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - const submissionTime = rosTimeToJs( - rowData.row.task_profile.submission_time, - ).toLocaleTimeString(); - const startTime = rosTimeToJs(rowData.row.start_time).toLocaleTimeString(); - const endTime = rosTimeToJs(rowData.row.end_time).toLocaleTimeString(); - return ( - <> - Submitted: {submissionTime} - Start: {startTime} - End: {endTime} - - ); - }, - }, - { - headerName: 'Timestamp', - field: 'created', - type: 'datetime', - filterable: false, - align: 'center', - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {format(new Date(rowData.value as number), 'MMM dd yyyy hh:mm aaa')} - - ); - }, - }, - ]} - rows={rows} - pageSize={100} - rowsPerPageOptions={[50, 100]} - onPageChange={() => { - if (addMoreRows) { - addMoreRows(); - } - }} - disableColumnMenu={true} - /> -
- ); -}; diff --git a/packages/react-components/lib/reports/task-summary/task-summary-report.spec.tsx b/packages/react-components/lib/reports/task-summary/task-summary-report.spec.tsx deleted file mode 100644 index fd86510e8..000000000 --- a/packages/react-components/lib/reports/task-summary/task-summary-report.spec.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { render, screen, waitFor } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { TestLocalizationProvider } from '../../test/locale'; -import { getTaskSummaryLogs, reportConfigProps } from '../utils.spec'; -import { TaskSummaryReport } from './task-summary-report'; - -const getLogsPromise = async () => getTaskSummaryLogs(); - -it('smoke test', async () => { - await waitFor(() => { - render(); - }); -}); - -it('does not show the table when the logs list is empty', async () => { - await waitFor(() => { - render( []} />); - }); - - expect(screen.queryByText('Task Summary')).toBeFalsy(); -}); - -it('calls the Retrieve Logs function when the button is clicked', async () => { - const getLogsPromiseMock = jasmine.createSpy(); - const getLogsPromise = async () => { - getLogsPromiseMock(); - return getTaskSummaryLogs(); - }; - - render(, { - wrapper: TestLocalizationProvider, - }); - const retrieveLogsButton = screen.getByRole('button', { name: /Retrieve Logs/i }); - expect(retrieveLogsButton).toBeTruthy(); - userEvent.click(retrieveLogsButton); - expect(getLogsPromiseMock).toHaveBeenCalled(); -}); diff --git a/packages/react-components/lib/reports/task-summary/task-summary-report.tsx b/packages/react-components/lib/reports/task-summary/task-summary-report.tsx deleted file mode 100644 index f7d0c2835..000000000 --- a/packages/react-components/lib/reports/task-summary/task-summary-report.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - defaultReportClasses, - DefaultReportContainer, -} from '../default-report-interface'; -import { DefaultDatesForm } from '../default-dates-form'; -import { TaskSummaryReportTable, TaskSummaryRowsType } from './task-summary-report-table'; -import { ReportConfigProps } from '../utils'; - -export interface TaskSummaryReportProps extends ReportConfigProps { - getLogs: (data: DefaultReportQueryPayload) => Promise; -} - -export const TaskSummaryReport = (props: TaskSummaryReportProps): React.ReactElement => { - const { getLogs, ...otherProps } = props; - const [logs, setLogs] = React.useState([]); - const [lastSearchParams, setLastSearchParams] = React.useState({}); - - const searchLogs = async (payload: DefaultReportQueryPayload) => { - setLastSearchParams(payload); - setLogs(await getLogs(payload)); - }; - - const getMoreLogs = async () => { - setLogs(logs.concat(await getLogs({ ...lastSearchParams, offset: logs.length }))); - }; - - return ( - - -
- {logs.length !== 0 && ( - - )} -
-
- ); -}; - -export default TaskSummaryReport; diff --git a/packages/react-components/lib/reports/task-summary/utils.tsx b/packages/react-components/lib/reports/task-summary/utils.tsx deleted file mode 100644 index 6437b6277..000000000 --- a/packages/react-components/lib/reports/task-summary/utils.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { Typography } from '@mui/material'; -// import type { TaskDescription } from 'api-client'; -import React from 'react'; - -export const returnTaskDetails = (taskId: string, taskDescription: any): React.ReactNode => { - let taskTypeDetails; - if (taskId.includes('Loop')) { - taskTypeDetails = taskDescription.loop; - return ( - <> - Num of Loops: {taskTypeDetails.num_loops} - Start Point: {taskTypeDetails.start_name} - End Point: {taskTypeDetails.finish_name} - - ); - } else if (taskId.includes('Delivery')) { - taskTypeDetails = taskDescription.delivery; - return ( - <> - Pick Up: {taskTypeDetails.pickup_place_name} - Drop Off: {taskTypeDetails.dropoff_place_name} - End Point: {taskTypeDetails.items} - - ); - } else if (taskId.includes('Clean')) { - taskTypeDetails = taskDescription.clean; - return ( - <> - Start Point: {taskTypeDetails.start_waypoint} - - ); - } -}; diff --git a/packages/react-components/lib/reports/user-report/index.ts b/packages/react-components/lib/reports/user-report/index.ts deleted file mode 100644 index 9c04239c0..000000000 --- a/packages/react-components/lib/reports/user-report/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './user-login-failure-report-table'; -export * from './user-login-failure-report'; -export * from './user-login-report'; -export * from './user-login-report-table'; -export * from './user-logout-report'; -export * from './user-logout-report-table'; diff --git a/packages/react-components/lib/reports/user-report/user-login-failure-report-table.tsx b/packages/react-components/lib/reports/user-report/user-login-failure-report-table.tsx deleted file mode 100644 index c8198dfb9..000000000 --- a/packages/react-components/lib/reports/user-report/user-login-failure-report-table.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import React from 'react'; -import { DataGrid, GridRenderCellParams } from '@mui/x-data-grid'; -import { Typography } from '@mui/material'; -import { DefaultLogTableProps } from '../default-report-interface'; -import { format } from 'date-fns'; - -export type UserLoginFailureRowsType = { - created: string; //date - ip_address: string; - client_id: string; - username: string; - error: string; -}[]; - -export interface UserLoginFailureReportTable extends DefaultLogTableProps { - rows: UserLoginFailureRowsType; -} - -export const UserLoginFailureReportTable = ( - props: UserLoginFailureReportTable, -): React.ReactElement => { - const { rows, addMoreRows } = props; - - return ( -
- r.client_id} - columns={[ - { - headerName: 'Username', - field: 'username', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.username}; - }, - }, - - { - headerName: 'Client ID', - field: 'client_id', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.client_id}; - }, - }, - { - headerName: 'IP Addr.', - field: 'ip_address', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.ip_address}; - }, - }, - - { - headerName: 'Timestamp', - field: 'created', - type: 'datetime', - filterable: false, - align: 'center', - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {format(new Date(rowData.value as number), 'MMM dd yyyy hh:mm aaa')} - - ); - }, - }, - ]} - rows={rows} - pageSize={100} - rowsPerPageOptions={[50, 100]} - onPageChange={() => { - if (addMoreRows) { - addMoreRows(); - } - }} - disableColumnMenu={true} - /> -
- ); -}; diff --git a/packages/react-components/lib/reports/user-report/user-login-failure-report.tsx b/packages/react-components/lib/reports/user-report/user-login-failure-report.tsx deleted file mode 100644 index d40ee77af..000000000 --- a/packages/react-components/lib/reports/user-report/user-login-failure-report.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - DefaultReportContainer, - defaultReportClasses, -} from '../default-report-interface'; -import { DefaultDatesForm } from '../default-dates-form'; -import { - UserLoginFailureReportTable, - UserLoginFailureRowsType, -} from './user-login-failure-report-table'; -import { ReportConfigProps } from '../utils'; - -export interface UserLoginFailureReportProps extends ReportConfigProps { - getLogs: (data: DefaultReportQueryPayload) => Promise; -} - -export const UserLoginFailureReport = (props: UserLoginFailureReportProps): React.ReactElement => { - const { getLogs, ...otherProps } = props; - const [logs, setLogs] = React.useState([]); - const [lastSearchParams, setLastSearchParams] = React.useState({}); - - const searchLogs = async (payload: DefaultReportQueryPayload) => { - setLastSearchParams(payload); - setLogs(await getLogs(payload)); - }; - - const getMoreLogs = async () => { - setLogs(logs.concat(await getLogs({ ...lastSearchParams, offset: logs.length }))); - }; - - return ( - - -
- {logs.length !== 0 && ( - - )} -
-
- ); -}; - -export default UserLoginFailureReport; diff --git a/packages/react-components/lib/reports/user-report/user-login-report-table.tsx b/packages/react-components/lib/reports/user-report/user-login-report-table.tsx deleted file mode 100644 index b1a95ba53..000000000 --- a/packages/react-components/lib/reports/user-report/user-login-report-table.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import React from 'react'; -import { DataGrid, GridRenderCellParams } from '@mui/x-data-grid'; -import { Typography } from '@mui/material'; -import { DefaultLogTableProps } from '../default-report-interface'; -import { format } from 'date-fns'; - -export type UserLoginRowsType = { - client_id: string; - created: string; //date - ip_address: string; - user_id: string; - username: string; -}[]; - -export interface UserLoginReportTable extends DefaultLogTableProps { - rows: UserLoginRowsType; -} - -export const UserLoginReportTable = (props: UserLoginReportTable): React.ReactElement => { - const { rows, addMoreRows } = props; - - return ( -
- r.client_id} - columns={[ - { - headerName: 'Username', - field: 'username', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.username}; - }, - }, - { - headerName: 'Timestamp', - field: 'created', - type: 'datetime', - filterable: false, - align: 'center', - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {format(new Date(rowData.value as number), 'MMM dd yyyy hh:mm aaa')} - - ); - }, - }, - { - headerName: 'Client ID', - field: 'client_id', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.client_id}; - }, - }, - { - headerName: 'User ID', - field: 'user_id', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.user_id}; - }, - }, - { - headerName: 'IP Addr', - field: 'ip_address', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.ip_address}; - }, - }, - ]} - rows={rows} - pageSize={100} - rowsPerPageOptions={[50, 100]} - onPageChange={() => { - if (addMoreRows) { - addMoreRows(); - } - }} - disableColumnMenu={true} - /> -
- ); -}; diff --git a/packages/react-components/lib/reports/user-report/user-login-report.tsx b/packages/react-components/lib/reports/user-report/user-login-report.tsx deleted file mode 100644 index 630fa09dc..000000000 --- a/packages/react-components/lib/reports/user-report/user-login-report.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - defaultReportClasses, - DefaultReportContainer, -} from '../default-report-interface'; -import { DefaultDatesForm } from '../default-dates-form'; -import { UserLoginReportTable, UserLoginRowsType } from './user-login-report-table'; - -import { ReportConfigProps } from '../utils'; -export interface UserLoginReportProps extends ReportConfigProps { - getLogs: (data: DefaultReportQueryPayload) => Promise; -} - -export const UserLoginReport = (props: UserLoginReportProps): React.ReactElement => { - const { getLogs, ...otherProps } = props; - const [logs, setLogs] = React.useState([]); - const [lastSearchParams, setLastSearchParams] = React.useState({}); - - const searchLogs = async (payload: DefaultReportQueryPayload) => { - setLastSearchParams(payload); - setLogs(await getLogs(payload)); - }; - - const getMoreLogs = async () => { - setLogs(logs.concat(await getLogs({ ...lastSearchParams, offset: logs.length }))); - }; - - return ( - - -
- {logs.length !== 0 && ( - - )} -
-
- ); -}; - -export default UserLoginReport; diff --git a/packages/react-components/lib/reports/user-report/user-logout-report-table.tsx b/packages/react-components/lib/reports/user-report/user-logout-report-table.tsx deleted file mode 100644 index cc96e062f..000000000 --- a/packages/react-components/lib/reports/user-report/user-logout-report-table.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react'; -import { DataGrid, GridRenderCellParams } from '@mui/x-data-grid'; -import { Typography } from '@mui/material'; -import { DefaultLogTableProps } from '../default-report-interface'; -import { format } from 'date-fns'; - -export type UserLogoutRowsType = { - created: string; //date - ip_address: string; - user_id: string; - username: string; -}[]; - -export interface UserLogoutReportTable extends DefaultLogTableProps { - rows: UserLogoutRowsType; -} - -export const UserLogoutReportTable = (props: UserLogoutReportTable): React.ReactElement => { - const { rows, addMoreRows } = props; - - return ( -
- r.user_id} - columns={[ - { - headerName: 'Username', - field: 'username', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.username}; - }, - }, - { - headerName: 'Timestamp', - field: 'created', - type: 'datetime', - filterable: false, - align: 'center', - renderCell: (rowData: GridRenderCellParams) => { - return ( - - {format(new Date(rowData.value as number), 'MMM dd yyyy hh:mm aaa')} - - ); - }, - }, - { - headerName: 'User ID', - field: 'user_id', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.user_id}; - }, - }, - { - headerName: 'IP Addr', - field: 'ip_address', - type: 'string', - renderCell: (rowData: GridRenderCellParams) => { - return {rowData.row.ip_address}; - }, - }, - ]} - rows={rows} - pageSize={100} - rowsPerPageOptions={[50, 100]} - onPageChange={() => { - if (addMoreRows) { - addMoreRows(); - } - }} - disableColumnMenu={true} - /> -
- ); -}; diff --git a/packages/react-components/lib/reports/user-report/user-logout-report.tsx b/packages/react-components/lib/reports/user-report/user-logout-report.tsx deleted file mode 100644 index 05198e7f9..000000000 --- a/packages/react-components/lib/reports/user-report/user-logout-report.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - defaultReportClasses, - DefaultReportContainer, -} from '../default-report-interface'; -import { DefaultDatesForm } from '../default-dates-form'; -import { UserLogoutReportTable, UserLogoutRowsType } from './user-logout-report-table'; -import { ReportConfigProps } from '../utils'; - -export interface UserLogoutReportProps extends ReportConfigProps { - getLogs: (data: DefaultReportQueryPayload) => Promise; -} - -export const UserLogoutReport = (props: UserLogoutReportProps): React.ReactElement => { - const { getLogs, ...otherProps } = props; - const [logs, setLogs] = React.useState([]); - const [lastSearchParams, setLastSearchParams] = React.useState({}); - - const searchLogs = async (payload: DefaultReportQueryPayload) => { - setLastSearchParams(payload); - setLogs(await getLogs(payload)); - }; - - const getMoreLogs = async () => { - setLogs(logs.concat(await getLogs({ ...lastSearchParams, offset: logs.length }))); - }; - - return ( - - -
- {logs.length !== 0 && ( - - )} -
-
- ); -}; - -export default UserLogoutReport; diff --git a/packages/react-components/lib/reports/utils.spec.ts b/packages/react-components/lib/reports/utils.spec.ts deleted file mode 100644 index d3ac72ada..000000000 --- a/packages/react-components/lib/reports/utils.spec.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { - DispenserStateRowsType, - DoorStateRowsType, - FleetStateRowsType, - HealthRowsType, - IngestorStateRowsType, - LiftStateRowsType, - TaskSummaryRowsType, -} from '.'; -import { ReportConfigProps } from './utils'; - -const timestamp = new Date('Mon Jan 1 00:00:02 UTC 2001').toISOString(); - -export const getDispenserLogs = (): DispenserStateRowsType => { - const rows = []; - for (let i = 0; i < 200; i++) { - rows.push({ - state: 'OPEN', - guid: `dispenser_test_${i}`, - created: timestamp, - }); - } - return rows; -}; - -export const getDoorLogs = (): DoorStateRowsType => { - const rows = []; - for (let i = 0; i < 200; i++) { - rows.push({ - created: timestamp, - state: 'OPEN', - door: { id: i, name: 'door_test' }, - }); - } - return rows; -}; - -export const getFleetLogs = (): FleetStateRowsType => { - const rows: FleetStateRowsType = []; - for (let i = 0; i < 200; i++) { - rows.push({ - created: timestamp, - fleet: { id: 1, name: 'fleet_test' }, - robot: { id: i, name: 'robot_test', model: 'model' }, - robot_battery_percent: 'test', - robot_location: 'test', - robot_mode: 'test', - robot_seq: 1, - robot_task_id: 'test', - }); - } - return rows as FleetStateRowsType; -}; - -export const getHealthLogs = (): HealthRowsType => { - const rows = []; - for (let i = 0; i < 200; i++) { - rows.push({ - device: { id: i, type: 'door', actor: 'door-1' }, - health_status: 'DEAD', - health_message: 'this is a message', - created: timestamp, - }); - } - return rows; -}; - -export const getIngestorLogs = (): IngestorStateRowsType => - getDispenserLogs() as IngestorStateRowsType; - -export const getLiftLogs = (): LiftStateRowsType => { - const rows = []; - for (let i = 0; i < 200; i++) { - rows.push({ - state: 'AVG', - door_state: 'Closed', - destination_floor: 'L1', - motion_state: 'DOWN', - current_floor: 'L2', - session_id: 'session', - created: timestamp, - lift: { id: i, name: `lift_${i}` }, - }); - } - return rows; -}; - -export const getTaskSummaryLogs = (): TaskSummaryRowsType => { - const exampleData = { - task_id: 'test', - submission_time: { sec: 131, nanosec: 553000000 }, - description: { - start_time: { sec: 1623383402, nanosec: 0 }, - priority: { value: 0 }, - task_type: { type: 1 }, - station: { task_id: '', robot_type: '', place_name: '' }, - loop: { task_id: '', robot_type: '', num_loops: 1, start_name: '', finish_name: '' }, - delivery: { - task_id: '1', - items: [], - pickup_place_name: '', - pickup_dispenser: '', - pickup_behavior: { name: '', parameters: [] }, - dropoff_place_name: '', - dropoff_ingestor: '', - dropoff_behavior: { name: '', parameters: [] }, - }, - clean: { start_waypoint: '' }, - }, - }; - const rows = []; - for (let i = 0; i < 200; i++) { - rows.push({ - created: timestamp, - fleet: { id: 1, name: 'fleet_test' }, - robot: { id: i, name: 'robot_test', model: 'model' }, - task_id: i.toString(), - task_profile: exampleData, - state: 'test', - status: 'test', - submission_time: { sec: 131, nanosec: 553000000 }, - start_time: { sec: 131, nanosec: 553000000 }, - end_time: { sec: 131, nanosec: 553000000 }, - }); - } - return rows; -}; - -export const reportConfigProps: ReportConfigProps = { - toLogDate: new Date(), - fromLogDate: new Date(), - onSelectFromDate: (/* date: Date */) => { - /* no-op */ - }, - onSelectToDate: (/* date: Date */) => { - /* no-op */ - }, -}; diff --git a/packages/react-components/lib/reports/utils.ts b/packages/react-components/lib/reports/utils.ts deleted file mode 100644 index 1defe236c..000000000 --- a/packages/react-components/lib/reports/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface ReportConfigProps { - fromLogDate?: Date; - toLogDate?: Date; - onSelectFromDate?: (date: unknown) => void; - onSelectToDate?: (date: unknown) => void; -} diff --git a/packages/react-components/lib/tasks/utils.ts b/packages/react-components/lib/tasks/utils.ts index d303b487a..dd1f00363 100644 --- a/packages/react-components/lib/tasks/utils.ts +++ b/packages/react-components/lib/tasks/utils.ts @@ -33,7 +33,10 @@ function parsePhaseDetail(phases: TaskState['phases'], category?: string) { return {}; } -export function parseTaskDetail(task: TaskState, category?: string) { +export function parseTaskDetail( + task: TaskState, + category?: string, +): { to: string; from: string } | {} { if (category?.includes('Loop')) return parsePhaseDetail(task.phases, category); if (category?.includes('Delivery')) { const from = category?.split('[place:')[1].split(']')[0]; diff --git a/packages/reporting-e2e/.eslintrc.js b/packages/reporting-e2e/.eslintrc.js deleted file mode 100644 index 933322cd0..000000000 --- a/packages/reporting-e2e/.eslintrc.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - extends: ['../../.eslintrc.js'], - globals: { - browser: 'readonly', - }, -}; diff --git a/packages/reporting-e2e/.gitignore b/packages/reporting-e2e/.gitignore deleted file mode 100644 index 15105c597..000000000 --- a/packages/reporting-e2e/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/static/ -/build -/artifacts \ No newline at end of file diff --git a/packages/reporting-e2e/README.md b/packages/reporting-e2e/README.md deleted file mode 100644 index df011cc28..000000000 --- a/packages/reporting-e2e/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# Running with Keycloak - -The tests are run with keycloak as the authentication server and we use docker and docker-compose to simplify the setup of keycloak. - -## Ubuntu 20.04 - -Install docker and docker-compose -```bash -sudo apt update && sudo apt install docker.io docker-compose -``` - -If you're using GNOME or KDE, there will be a pop-up window to ask for privilege escalation when running the Docker container which runs Keycloak, the authentication mechanism we are currently using. -If you're using `i3` or other "unusual" window managers, this pop-up may not occur, which can be confusing since a password prompt can be easily lost in the console text stream. -You can add yourself to the `docker` group to allow containers to start without requesting your password: -``` -sudo usermod -aG docker $USER -``` -After issuing this command, you may need to logout/login or restart your system depending on your OS/environment. - -Keep in mind that this convenience has security implications. This tradeoff is described in more detail in the Docker documentation: -https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user - -## Others - -See - -* [docker](https://docs.docker.com/engine/install/ubuntu/) -* [docker-compose](https://docs.docker.com/compose/install/) - -# Settings - -There are some environment variables that control how the test runs. - -| Key | Description | -|---|---| -| E2E_DOCKER_NETWORK | _(string)_ The network that services uses, defaults to `rmf-web_default` | -| E2E_NO_AUTH | _(bool)_ Do not launch the authentication provider service | -| E2E_NO_REPORTING | _(bool)_ Do not launch the reporting ui server | -| E2E_NO_REPORTING_SERVER | _(bool)_ Do not launch the reporting server | -| E2E_USER | _(string)_ The user to login with | -| E2E_PASSWORD | _(string)_ The password to login with | -| E2E_REPORTING_URL | _(string)_ Base url where the dashboard is hosted | - -Boolean values can be 0/1/true/false. - -There are also some environment variables the test runner sets by default - -| Key | Default Value | -|---|---| -| REACT_APP_AUTH_PROVIDER | keycloak | -| REACT_APP_KEYCLOAK_CONFIG | { "realm": "master", "clientId": "reporting", "url": "http://localhost:8088/auth" } | -| E2E_USER | admin | -| E2E_PASSWORD | admin | -| E2E_REPORTING_URL | http://localhost:5000 | - -You can overwrite them by setting them in your environment variables. - -# E2E workflow in CI - -NOTE: This section only pertains to running the e2e tests in github workflows. - -This is to document the flow and interaction of the e2e services in the github environment when: - -- starting up the services -- running the tests - -## Starting up the services - -Below is a diagram representing the flow of commands when running `npm run test` - -![Flow of commands diagram](docs/resources/reporting-e2e-process.png) - -## Container and network interactions - -The key difference between running the tests locally and in github workflows is that in github, the tests are ran from inside a container with docker-beside-docker. So, the docker commands connect to the host daemon, this causes that the "localhost" in GitHub refers to the container. "Localhost" in local runs refers to the host (where the docker daemon is running). Tests in CI runs wouldn't be able to connect to the auth service with "localhost" because when a port is "exposed" or "published" is mapped to the host and not the container. - -Instead of host <-> container communication, we will need to do container <-> container communication. This is achieved by setting `E2E_DOCKER_NETWORK` to the github workflow's network and setting `REACT_APP_KEYCLOAK_CONFIG` to point to the auth service via the container name. \ No newline at end of file diff --git a/packages/reporting-e2e/docs/resources/reporting-e2e-process.png b/packages/reporting-e2e/docs/resources/reporting-e2e-process.png deleted file mode 100644 index 2485a361f2b447bf63df19591187517c311267c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24265 zcmb@u2{e`M+cv%_5t)ijgwSBv=6PnD=b3Fv+dPlkER?a3CN!8OQ)Ea&<|H&2laMKy zN-4_hf8Of(zt8*q-u12Zt@W<;tf#W~zW04!*Lj`iaUREUx@@4QPD##0jzXa*H8oU> zP$=R=6pBcU>=67UrL80dg*xr#al!&pjS}svsvX~LpUsS|f z1<$AL5NheDM+gY{a}h7R=iiGMz>V?={ke#QnTMsRlz)(_fvAutUe&+?7wRFZrK)P| z5uopBC@$!s>foX*L{RlN3%1mE2zC+?GWExascO3TXep_iTZE_z2M7fO+S%EOICwZn zg$6rlcqyA2X*>7_shGHV>Z*l^ib)7*sM-sQ=-aym23s0hTIyhZ#O;&?we*#I%}kYz zCA2ieLsUI{bo7liRZLubwVd6Qe2w)qO-~DBU4;$&T}3T)?d?U)P3%l1jC=z8v|Qa( zJp)vXjf9MGI3GPFBOMPxait(%c)O8X``JNvXmM@Sl^Z6#U3L82;)eC?25W zB_$;3?=NMbZl>wz?5Jm9pb_XR>4-CPG_tb~g*QnCI{NE|ItHsd3KN_h{Cq_WO-#+q z)s=!YEFiqp%q-P{Rdv)2gT4J7%^Y-1EOnH`gS_fY`yy1tHnYQ`a2aP<&J4G9AWb8%lMQ+pi;oUX5+rMaHE4%T1F+gTVMMoI{$ zV&*I4iqn92!8+odg`7lSja0n@ElmspLlFQ z7-Hh-sw-h;?4=s&A?~MVA>ktIW$2}^qU>p`6%wN9s^lT*iB~t*#u^)|YWZSCbg&lM zc81RO60WZ9+Ny$PO4?q|c52%24iAT5e}8Q+3Co~R6;+(0ntP~+r#9j9x#119U}MxAHQ;~n zpS^RC9sCjE6>KghBo*iZe-DxnRKprsnmVe&@x$t<1i0!V%dQmaCu%C887N4w)G*S~ z6E*kKv(pUFHNYA9+nI|?YU>M%I|fN;x+xikI6H|N_z^-SoF(;jg|$sQT>T~V9GsPW z1GKbU@M3}Xj=H+e;>Mo3rXfK}I?fKN!m8Rz9&UI8-yn4*J27K*EhSN1NK9B?6<<#+ zB^Pr+2X|E`H$7LoAcAVBh(2Bl>#eJ2gw+$a7qL|LwvbX1we)k>G;;QY&lq7{#hr0F z`mVyJIu4G(YTCjCN4o%z0Eqx62M1^0KnZgbbyF!jUvDq0rH8qRp9Pj+=s*w(HM2Jh z^z{@pP%n zl7p$JzOuW$kdCUd7_yB>yhzKj6o$NG(we-Xc)b%9v1s#k;0|V{M zy}g4(v@8g2b{2LzhN6NYSOb51Ej3+dcNIT>A2Ba|EfJ4EeG%j~AT@aTsF*8T7!th9 zgY;cREPNeQl_ZSC1HFw@^a50rLmYL4wR8os9sy<&f#ygiaE6bC+9?GX1xOmJIU~1Z zBCHeW=@lqsA7rSFm%@81>);&>ktopA@|UvHcF}P{&a8`ph?cLrrG~eQrI!BuZ07$s{=A%Xor7v?_vuA|&NpkT;mXR~ze9Y^n?8})Ev zS&_{W-<7o@G?6M5Ege}*ctm83&asy<#vI>6n$LwSoVt1EtjOC};lWOykFzHvbQfkC z6>kSsJH4)op_%Nt^k|M}Z`|qiT{#n;)U6nrk7wQq(bCcycC0N9l{O?M_RPG0j~iY9kLNK_@Gre9Yrn;9+*@WPAt@z=U;jS!H0(D&O0mFb>TTq%2pu_z zwY4=3D=Ys6{ak~|#@`>KvAI$4@ua`LO{CCrs7Kg;f#GIdbk^FsS zMajY8)TK+8eAd6?7k;)zlWMn<#}e_uvYZ5ouI$9q9C_Q|CsE6=GK z*@NvIuzRM4$t39kOYd^=?QxP}zc4?3{P^CfuuH3*h9SzKNW6IQV(|KRcCYbz5(x>3 zFB8pdQT(r7XUQ>JmZ85j@5#r|tWWIi#y@Roo=K9aQ zdHL$q^RJ_|cz5?i+lUPkl-2%L29{J#R(Xv}uPzR0GwseP>|MSi;!NBd+wrYwOK;Ny zqVTq)F9*uzwzh@_3Uxv@m?k13qCfc98J!kbEUnkPr%oMofA{cuTn~97DK+aYd4B>y zB{Vd&*mbdey3DHfJbc~QnDs*S6VFk*z1&_ z4_FcmSTu1BZjYl>!>@Fw^7cDVg#V<3O+(GMjqPmxCYoo(7e=z7&gkAf#f<*_WrUM5 z{YYYKYpWW*?>o1+Rzbf9E-5)#b>M;S)Y6js>W5lyw#SxyZSCz-3k!$C!optN71Ngf z`l><$iT%G@g#Yl^wcn?!VtwcLgmyNZrSseCD<~c|bbfw*!BkGp$!%DZ>v7{_V@Yj! z5u1u5cp-LnqK_Xxs%2-&1W}EQjA-cS+`8n9#S(At>=g8N|JT*4+U&CBFI>yaOrD6? zqRh(5O1ONP$UqM7`|0KN;NRmxh9)L4-pxB`Y=Ty72V2BCk*ccd_qDZ-I7;T6J{O3FsXGKgfZR4t56 zJ)LFQ^2N|0TC{$)d~(x;t+v)yBG~;-h-B-jil=_FTJXLT3K1uU%Wae=nl9kIy{T<& zZBIz~9Yi6wJk=iG{_Y)GPfw4GfhuaD1M7wiV5 zF5$03+9-M1A94uQK0WZSEP+CiQk_uL)4N)bXgK%xkVB3*9(v{Py)j z+kyn?wqUKS-YAdi$~F>l(h6`a(3CjNiuC|ydlW^?AgMz z@ziW;etuO2B2=bIetyDKEYb(z$7AvrHVID%<488FZ|~{on7udcKGtIXHQd6&LJlLp z_6m(;zdWtU@m5$Ll~alP3zFazMuQ#&M%#|H)LU_Oob$26{hP(017&&&a`H zv7b->9mIYS~7oCUc{(T)|qF{eQ#-3H{BenlA?o7)k9(7g)M&mzz{c7S%@?M=R zWo>-c*yvqqQgRO>W;B+j=@Ptk5wcrt?Ezw9qx`(QYj^G(&Rbn2sHmysX{Yo5ZhZFa zjAi{*SfA^$k3B|yyf(MJAU4`R6_aJdsh0H8Yv2Lp0ZynHa)S#U47NH|1jbxv+s>;j z#xXQ37#loNh7OI4j(R6vxl%=-%C$WIdwJZ)$LGDrg0wa~jM&SeA+d|YTt*?X!QW9{ zUS8&WHqQGW3JD9FctRk{{m|aivy@h_gn=Cz!f4M?m#D^+yR*R3mZ)Pg6^hWb`}?tW zwcsb|5XXLm7JaNF?B-ai?8o7dOxhbZlf?a?&I|4A--vdj-49)pZ#d~l1F?Sj*#!z@ z(|# zCR-up@#DwBot{uy>mJm3j0juT`H}eg`pyqOvMuOAv$9@Ik>4z8oA?PuF*sNfYEy;t zTUJrm{)15OW_NetDENN;P(%K9_}c#AD+%g8LYAAGi+kd6Tvk?ga(enwMTMY?C=;sw z-IMflp@#zl1LynlN#A73oW0=v`mUHyKtOCmgN)fj9D8iXvuCn8_rxi+3XbmX?!JHG zd9Q1O6|zpIbik#W8nODouUAUV9}%O3g@wO=aDN2JoCxYmLUJ+*D(1h{?l>xzD+fra zPI7Y}mY0`jlnKP#mGHhA`1OM(-&Lp>(KN(OO-%-+L%8M$Icpo6zGor+NsL0o`dPBq zyG24*UG5hawzsz*fK#kljH)e}CVZ7nDz*KAkMgj^GiSxXL192j~c%^0r)<__@fP08|U0 z10m-(CyIvLJSLi0e*O9dU!cRji?4lYV5+fs{`zx&S;bby0GN;a*xr;1M1(*4g zs=vpi@KqEI6VsKBLEs_EomR#Jq_gd?S;DSCV=PtLC?_V|B-1yOlIF5)9ol z@i>q773_X~e)r!(J&k*PPvXEjWa@}*M)+$d#On3*bZ3(^G52?qpSo`Ld-uh6=-v~@ z!?8pWB+^fvKAj7D@$$_Zaf^tSa9oBUo;XdwmY?$5hZ+i-dV&zsS$TO@fu?m1G@qqO z$q_EYL&|Y@!*UPDzez*y4iUSkC|yI)x3oCe;>7uRmlKjcC_ph1OhMl#TNAEcRdaFS zdg3v{(U_f)aRdNmnOWi?N~Rp;cq#w^spkMIa*IvCLf~IsV|V%Rn7cmc+g0cV;MQ6J zemF=eW3kA=b$u_0k(QQbO5XYy_KjUu_C(Z*SfY@S(EPhH=DVV0FV9Feu8WvZW9Bj(>8pCBx<64x;>uScV{yIrD$o%^df~V zWnrLj1_J%I{Dt~eoA!#Q5j&weS+W+J4=XBY&gx}c<5M`_tgNf+ z>%pj&t#8dKEiH;;&5;xHGJcL+nr!ITsb!eId7oS4;5$KGZ;-8;&;S}F;8{y&Mxl~rh*R;Fo zPKQR@L1g#@1(BkTu*siDWDtl`%Wut+3+v5OrJ$puyG@yhB|}afQ}Q7Q@Yv*J${ROs z02a23h>(xi-Ec+{!*oX?fd5W7fkLkRr@~h{7}lra+3qjA=;+9Gew&4gdj4Dmx~Qqa zVq+vZRyiEr{Qb@Q$@bLLR6qBp8yuXRQ*(3iw{Fn^u(a#VQCeT0N%8&mQ4VKe!4Al3 zV`HPgw5Ukq$&sjKs(H9YVmL&1d95t|DLhV!*C-NEJ}c9z&_Ga7QBlo*Y?Of$&6!*q zy5_dvHNUnrtbOrQU%vWnI6@g28NDT@yy3q_oX^ZPK=4AN)$-!SAt(*&E1hgaD5&A> zy}8O$lanYmHnx2*`YKMf!057+|7XQw6KsKzW)SUC^BnYSHI~VcMU-<5THd^&g1Vuh zr}yHi?@W$aX~Bw!hzKNLLBCHLsCqMFxDo=Sxwy!JmdAvwcI`W_wnCFwYF5UxcCTi? zLFj{hgw)1NgmI+zHRi)SSH9_CbRXgG;?PBRXDD{2O zkeNLLb-ugk0oRW&cDTXJciCd@XyG2FN5=H4%Le^9M{h zZES9AoVJoq=&gPP%c_Y@_?1>(fn2g3E-8XE?;~kcoU31$#656V@7)_+N-HmgmmS!l zsCsX1Z7IBO43l7$4L-l%fqfeV-~0s;F44*E~edE*wj9EHQo!?`yZR z6^$|Ef-mC;4g5sGZWK$yjb%Us9;J?Stjetr#Z;TN!K%&Otq>HRT!7g;wP&mdsWOE*NkVR(q6) zh^QEd5NQ1m8io`U7IF#;ABFN&_ic7otgk=d4qUUuq9=`SB7AMgyqb?iy66|Pkey24 zJ#kM)M!1{BYkE-R>~0h&9~xp|kqOkH#S$tA9Z0ado%i-`=Hub%?%%kycnv^fduuDc zx?o8hHo^3Ox%u$HbNL!W3y_I@{QVn%r$Rc%p_b9nttSQTBtvrN&Yi2p*wiABJQOEw zZoqPiV6#L6fS=|3g0)h>U+gJ@$>c4f`g4i`;tKpphLrxCmNylI@*L?u9pTXNv^Vr7 zr27<9o^*SE-KE8of6$mSTv^tXCzV{n`{TpjAb_M7Lw8- zzP@dIoQ2oy;Wf%cs2%SgyBXKP*4D3Aqn8d@#Du) zQGnI#p{!KY*2d@ObINbdbGqJT;I~#xVU>gUNtv8H4=B-Yq{^|Ps_GJucyI$+sWa7Y z<)fj4@bK{H%~z+kZU}t+B~)8W>rzSz^$P$~@c8+Vh$MX`qeL6^6?W+MHiw&ac0b?v zljAb+zj7ewQ?nn06O=RLRtY^2w@KsAH!?m1!tySu-e^8qQ?zesBBFVNP0&C9_-49Nysl324+J`qfb3D5n40(LPmdRR8e z@O7VJSNPHP6m_JcnHl;YPH&{TunoTg;2b&(AX~@*hzh#&o*b!||MpFQq?&?(zoomI zoY%ZuMM;UMe_#Ob>>NMSnWCKEcmCtE5JqtiM%4NK`H{Gq~&U3l|D{E6=wQyN*>mzioT{ni7c0 zGTUZW6qMPOG5@#hA|l676|Mtkbnc244?ctS7PNa#=KAzu#na#wyM=1tCfTK>>jyAmk7k@f((Qk!mpiVgD$v+?gzAV zg6{7yNh~txsBI*8u+Y2|1W=;jk9G(kBGkgdLdBCO{9*#e|1E4%ke;#~STPau#62MY z3f@9HlK^*jpf|SeQPU=Q)N*L8S~8R7jOR#|syIe3Ti%9=|2TT@S8en0*bYd9+S$o0 zGG^kKb9H{IOuL`&dDGC*nebq;qyxG=5azZ6h|~KkH*en5jq3p9_1JYljj73JiddR3 zf08nCwNKrEiw;@j%(SET1ItPL6cB>vQH2TjoD zH<^i$5b~{Rz2+yHn+1(8Pye2X^cGFg zym^KlXmWwZ)f=n3u%@r$IuN99qx>{-FXAR%2&hZwso>b8rd^H*A!-58BNXz(!S(4M zB#uHo_8djulkiS!T3T4R47BDHU_Z!&@vE6Y6oqdt6rw)0PXo-Rp`nR_pP*WRL19ga*?xWcpCY*b z^pc(*L7)bjGO%TNhDk^v8( zpcs69n@tUz@B8=fPhv0+Up3^KKRU-ZPT2?z)zgNCd)7`j&+4a@-^3h86WNsBhujQg z0fc&tOwcl_w`P|+RqL_)FxAhwx1G>^^nsj%s(0rBHt;;;I#?3z35zxvUu9G9 z5={Ym>>vqA>&VD)kVl|3I}5KMebUHU+O1m$|J?#i-Scj`{-DmjlPcex<@KM2J3y_D zYWKl2$npK$TASm^%o2ibgIwAS%4uWB;lIJpDd-4o_ftUhb)VV)R&zIMmV+^|v8GQ& zzTY*1dj9K+1;+Am(b!L#edaGftw6aGx=G!@a^3oS2CIcvvc>$C_#`A4wtjsT*~kR& zu941oEB+5+7vW)%PWbds@ckbc1klZ&?>wSCM_v;BPr~_s20D}o(&J;n6fLg+{`LF| zs&e3znGXyM@MZE9QEBSx#sc)C*B;bS>DIr%aLN>oaREbGY}&O>r@>C5Xl z^Y<;RO#ryN(x@0sf(T#U3u%(|ee9>dhd@J3z=3C=Ih7slXODJk1~qFII)g^91?hb- z_iA9^r*35A9x2cqFQQ4QF_}_DX!w4lGoGBA`wfzvZUw;xL5qcjz;ca!2GCl)?q&A9 zBfTyi0KF&lAol>=Cr%bSBR4yDet{SuAZ=gu|0aPB7(WD1`A*{AUO5d%+a*VK_^zsi zdNev)!2T&mIT^b&dM~np#x9)x0V1ZF@S3XQ!q1UaT9WxHlU-+zxoxu@ae)1~Z7j|3 zl?iHz^*86(pLb#tX0Qoc*o4$W*^Q@S)(y#449I-3WPMs>eK@ie6|%m^!5M1UgcIz~ zDXPTG|@~a(Qs&z2|Zcg$;Xn_&`dw0 z$+KATb~zifZc5hIF}YQVO~5wN0WDtCeMHjFA%d{NW-B; zHpNBYBc#OA$R#%ayhmf#+)E;q+DjrLlS^UuJC^1`EI;EiE%qTTcAbKqpZV2*Ihk+q z`rc>^O*0w$wnLmgIlCE|O%aQ|pa6C5){b@z&D+E5AL+0ee7kzK?9U?;_q=%tt!s7D zzgMSxqG+b)e()pm0H}8*_&#$)hv170&5xzY>i8xh7Q7e6{(K3`a7qlD@C1H9TW{9> z0?WYf%oJW&)>|XmbUNm}-S^#K_UG@W_iWKG%EIE>55&?O#tt7X{;f#Xr%AR_(py8f zs6cTPdxCqnxhcSi%!X^QxmlS^s9=4sGnOWr1Omm7#cZfT(wMBW_4$@JnGHpDt}!-& z70b|cmHF9(?!4Xs3U-xx8my~b=pG&Rl`!ME(}auVmwRh)O$OT$T~lJ%pppm{=9YiF z02_gq)5~b=?(}A!8NO#LYr{^+^|4#oV<5Nbxle=L)+MVnna9p+9-BoTyu`SK32jbc zGv6NuduKggu5NArJ%X8CrK&gfDXe$)@o;fdvPwfTJZB8o(dJqsahm!ZCtiY5b&O)AFo}69fG0k+%^qxKgc00S5 zq$B;$Q=7w6+mQL{ZAaKl+ps?;%Wc^G#=x$k%^p+Q8!NYyEC3SB%_9$1BC!dAxeaH& zLx_3iHl)E_dI{2E6HHdNif5bA>7(c7^$thk1qvZydlTgkXbsEXdg3QLsBP>Xd$} zD5IHFOHV#nz~&b9*-n&!TMMSK}M_iG45WT*;54=McUHEI2Q3X*@Kf zzz|R9^JpFkc7f=D9L(ExXu60x&s@r=~3X}#oSscmxvqu_be1O4o)fYeM~ zIj5f({I(sku*G@14KKMq3@eXpa@#Z=3bmHayb{}ipm!xDrGzV2uue`+vCdkn7!7@W z^*_!Knq$X|i(P%JiWExno8~J&4)PDxEfbYTRwb1T&XC9Ne>ie;Ae+ZhEzkMGZ6SLa zdV15`Z}5R;9%I{8_{Q3jhhb4m*;$nIWu5foK$f0+j;QS;RkU&g$epjRulptUcwXc& zLf*a@*Zt@1eDuZ0+rhO^+HY&3^0o?E2taGcXPMGRi5HdE^_zByDqrMm5*XJ>Cb+2^QLZo%u`L&`S_p-5E3YFCN;P!e(R?w zsP0;kd#>rC# zb@dnl_zB?oQJuk#9gNJWqt7Wx)6Y4Q@)>km+_TH|1S<63TQ() z)vva^eM|lB-MjBUejp|qqIqJ==7^o|t)y%@5M+o73Sm1rHFfdnQ%O`*W+n>|2kvw) zrlFAnZhL!mKpz$LR$=c1D=RC~Mu4J=a1fyQfgXwFSpsnY+8LB$(Df3nf=kuaBG9H^ z0hKhr;`W_8m!YFq1WFr789>pu9&rA)dX@T!f98oIz2P_>WR5iuS5<$0ek}xTwrt1` z@M_$?od7HfLSAqG=#jjzDT)G|Knw)K^K0zNf#uRV(Fcz*da>@6OD(;?N(5{~zHy-*w8(0J7k$?jO;MkJNB^g3 z>eZ~#0A2{RE}#*kfx$t{S!nd3WVHh*gLa2D|jM>>){Etsv(B94u79T@n za3@J_{SW$ZH{aW&q$AIMeQ*aoKPo#rdywlW*q;E?w{>=sUcY{wQJTO-bwV-<2+7Hs z;d9FA{5FWq2-F*dj)T7b`}glrsj2kPw4V(-@$Rh%26H58yOI}rRp>4HgOL1l@X(>O zyZYhbve0!$0i)dtujkh})phuzZ;allbNoHxoZSknm$Te|cV@`VXlS9Nt&!HRed2qqA6pRM+5zklk>iOPXi4|ETb zD_5=nPkIiLH3u&*1tf1E^3**%FbGvRGcz?m&sFmbS|&38&##pJC$*Tj`kCKWdP!Qt zr>3fsS@9!@uw~DIsK_-dMLOPRyPHd>SKmnK$w?r87~*gVd(eEkfOFvvpGF#4A`rK( zuC5x;(ZD&OVv|n-vY_qbN7h39>^RG^7vK^U^cs^ywE$7qSE$b>8@^6c>otCCmw>h&&6# z9Mn8}gxQSpP0X&F`3@EHJJesIYYKr~u^l&lUQS7gry+)v1QbUHat{qb-Zy)iJ_Vks z{Q^pLG#J$;f6VqE0v(V%;BFff9#$>X%e-&A)YsQXMoun#w;7MSWyO}-QGq**I01n4 zjM!f3GgwJ%U66rp7-fTdTw5!#Szb5LdtvLBDtrJD{T6nhg+CAe zk^b+{cipEffxVL?%+sK9fVzGfy2gXBuFv*%xBA!3%dJ}>7XyU?R1k>wyvfJV=s11( zjptvyuk+g4bb97yl`2X|Dz3$Kbf&Q716PiSq=rl5|8nv*{&n&JDiD;OL7{k3wWJ+q zXJ(=i5CT<(Z*siVy%HDeEcrJ8cr;&ER_YXyK>uw5K1tlP-} zb0tUw1#eHVuw2i|@(LWmabWn*J;O1vin-B&=3D7D#DmCk{aeMw#lcgt43JF0-Is`{ zP1&*W@!CWM@R({#e%-gYZ_5OE6>r?N%!-YT1+XNtH z;A3M$pXisbUwyZJdFInNFH6csYzK2c?_p`+If{n1J_!yts$O1jR!=*9?9HdNOv^Gg zH#Z)X4e$Izi)uj#A(UVPKN=#8T7F$|Ga2EZlRkShqGuO_9EC7um&{64fj5(tlLK2_ z3UFeYd?9i86+i*oMWWo8pEAHv`SRXMPf;A92?u$TkFzedy zZf~qlMgw}-3;^dTxIpD&v4(C;r)!r$1tNyi2>*rs`f`2z-~0KDuy7R79e|+D14l9t z<$V4MMFw0xAR{k`6c}yj#O<@9?XYF4;P*hpixh?3_by{_PbcN%SfHkWFnj&u1du+6 zb!Nz|FGuMB@M^6tb^I1p_Xopu`QF~Yf9n0{=sk=xFn+%f>nC$u2e8Y>lb1lhhSZr) zb2jKi#E(yx4clYKDoY)3vH^>?JaD29qvI}mK+)+B{66a4eB9IdbDGV65~g(M*>@zU z3`t*NpwST@%ZU>ww1&LftL|8`nYO~=1Zz}36(=}9L8>+?7>-AXTT#ysCiQwJg@pRJ zFlpO8&#iHT@huV);m5oi*U+eO&fp`D3N-cg(?fC1!7Cg<+s2>PPSc2t4F@a%Vok2- zF6=0vNXNk{7f;V*ctY0<_=z1HWv9qQ>y1TeFA5Xdq2p*aAfSQ7Jb>!&?-ztf)ybA; zIehr=_g}xnnSKKm4mK6U&RyIP1^$=Ak&%%Pt?P_F=syIa9--)7aAPo-VU~jZOguW+ zRK+vxiNRG7y#=5n0Q|wP}*fYwOMtibYee~ z{-`OF%KA0CWS zfTB)|IjbR1UA?ZK0jYr<1N?hlM1co&a?x(J?UY2pJ1D#7)TU$Opz z*?SU@0#ZZxZJUyydqWDrpIxoL`vG0jzIC2-J)d%Q=%Zh;ztSRFtSJky?MRvMd_NCBQp-;E!RsQT#Qn>UXE$Rz;; z3qh6>xwq?>X706TG~{>hgSpw`F%UaD;NnEvtY|PyB53JR^DYzQNkmEjKQ__JZ=^&$ z@f|X$-*e4Atf!Vx0P;HueHoLH+2Q zs{I%W)@;w^_W=w2r{Q4H!GU|()1wRqYQ%RfZ+bYr?G(FWkE5q#P&rYH# zK)oWuD&#Qlrj0X$ZZ(Dozup3^Fo-W?ps|AKT6-dOYaevExmgu0m*3V&-gw`zGG{HNxOqF=gF{OKvm zq2YvKvB~<+>^;PA$H2e<;91+TDSSg1aX%s^TgXe2LCe;4-FXTpQ9s77(b3c6r`lo> zbPZhwvivuPHHdzUE58h|Fsup(kfaXLbAO?D$PEH*8j}3%@|yzLtbz#il1O0p&X-X* zU*JmfUa*s`Mi4AK)4lDaOh4l~*BVO)2ZxsN@y7nfVTGP<|JQoDMQ=QFpVvT@2!qCSUF;Ic6`F(Sw0w7qhJ5~73sKK%G7_X;? zpM%|#s~U5=>tv3^P2$rR3yf58SOKR&06Cl^e6XkYuW>s|k1ab70`} z*{^R3>KBzvUldl+!@~osgnR5_nEWOkUug#b2cq5%@VS~?E+aGtH!P2rGPm2Y`0wpr zfZzp}!s~w3;(-!>D=u$y9l-8zhQV#nTIWA^A6;>U&|%_d?Qe4x;-dJGFbdZgDt1OM zBSFOZO-oNtk4rr`dnG|2yyM7y9IYFmEbQ=-CjTBM(#A2PXY1pyEmgIdY@E^0N^0Ku z>Wv}{GnQG`Rke-R-HOHc{do7t7V#5|J@w63o9n5-2?3}Ganoln{)#v!L2%*}5vd+@ zMmPhonN>oHEEM*RQ_a)*yXcwn7np#0iH9CGj+%`M3IjJL4Z`Wh%-tnF6_`FkMpB;s z9Z7-djEhDRaz|KY8KI;(rWH8gM29FZH#aNjWyx|kDn#yvb7K%b&nWTi`T8(2e;c#g zJQI*S5@92hONZKqhUnq`ihY9k9r3t_&5Y<`e$bIhViw2H-2?Q;a@VZeqZFOQAI_!_@vJLN z)qg)+@g?D445+BCZU^;NAVA%)Z`r!LtpXP*gfX%)n8B|Al34Gt-8Cv-Ffr+p@h`nM zmD!$ZXfwODP?+6Y<8F?sr?6yzrhTVbn4#8b-#BAZf`JJLxMt~Kkgm|SXPPiH`U}f} zQh-`|;4x5-UHY)~HwD3;iY2qIClvoXhA(WcDuMAhV(Y5}piPc5XAVIv^Y&+I zTVQC>!w)Suw~kmfet0KltovGmhld>Ucv+gOsWT4ao@w@*k_rHwV_>WqOXtbDwav#V z3((|(yE?F-SpgbUKvlP-&Os0TeSKv{>usU*`qq~A1)+OJW|@yxDkOn~$v4)IDi_P= z7~XqXEP!7DHU*j8B5etu%bj)Xs=!q((Y8-GaRbjAyZXv2LF65QQ%IlePjQClh@_chW+*u^?2V~BuoGGO-IIEsziVgvx{vd zPXb<>WNny{!pDJ3yz^zZFt3CcljfXh$$>HJ6nZ(P%)N-k$%d|Si8ATN7TVg3ka5Xi z(oE;vMKM_bmA#*>#EE)^&!jeu#B<5y2e5rg{(NEsOHpny($ zAf*4>R6xcm4mi+%n4nubyoCRAm;p*!(s7YPQ0#%RSJS^-2d<6K)p;VQ(FaLMIrlpO zCue8QlP4A3GOsV)0RQB_nYetvg-GU{rOzC|mH{k4$OmYFVqmZ%7y5aZ;qpv6X~a?h zDG=5Z>Ar)%)(qcgK8EP~U~+*UA}t!Ym~OqhX}tk&1(ntLm)`KEk7gVU7XV^*4{rj3 z4DyZuYMxjfg6h6!&Xbab3Pu?F0H{L56*;Wqw^jCo@cO>__3}HP>M!-{7k+AbF&0iV z`5&$;%BXM#15Hg$7@uqfoQTX+Z14sa%W-45k z-=D4ZWQ^;8wL$z{XSS}_JbCg0h{)?VZd?LdxeaJ9Fe!k|N2qRB+lkY^lc&yp0*)Ng zQ6saWV9=O+I5q#PX?nM#)Uc#ZX!7e9ua9hzRmaSy(@ z<8lLr`nHv;jaf?)+dyEq4GbIuxU34P39c6nelf&O4s2fPja4{yw6Kye?9c{A1?a(m zn^Jw7C5NyS`4vwcd(i6}8&hx)5Ysx)rUmb~f`Wp=H)hiTeBR=@R`=uhhvvv;!uTK{ z1!NKv_&;LQxrhx%7>i;eDY+3jbeJ9Sez??F!Vur!C(es7^l=EX09eINf}aMQP&eA9 z?`z%^1m*{v=QGFWz^yY0i-^#I`vwXl zc(TYK>|ymG%Md{oKEi%blqq@S2N6Xqsv_vDe;6vTJ}-E>;uml_M* zcvZlk+?do__cL`nW+C-X{iPZZi8e}IU)^85{tc+erT_k6q*vPB4oA$6kP}HxPLP-Y zj}$|5Tf~_PP`J+EmU*+-4}_Ky8{7vBLn z6M2d=R*5}fM{bPjA8@S2r2W3ldhD3}U;{8K0w5TGYIO)$V1(FQSy`#5tVEImG#g`; z)Ym4&SMe(fdmGfCT}1<)yl0)gSs@8zx=yAvJycO(wh@-GYlX7FEp z@2Cueoa`|)Fw2#0qZYLxZJUp;glJOZy97{OGIIBss0TkresBBd%dRdW6pUtdI2iv1 zOwb2IE&Iq`X&Pp01sBsH9oY2SHa3Q?wSi=Sny(-Ihs)!3U79Ow4z^`O$5XMm4OT~j zfCY`|LB-z;r9eCZXnf*5;kA0g(RfzmR%Rw83^apnZVF&@=d+NXG)IpT137PHWd$wy z9m+(Y)zi`jpf}XzFGSdfh5mwmA8YFjI<%*UM^e_-@jndVK~QCkN_lg_x|M)Ys;a6& zdPv}&+Q-Lj$Rj`3JAlS0=+-9&adq{$h}z~uU?JDR`-YnL!u8r_r-6MB96r#gs)3AC z2}{2X-G!Qd2#jac)4`;LesdCJbH}PA#T~Llm>Ipcc+^x^_aA4Vc5C@F8omoSX-Mz`l`H!#lhmE#NeFG3ku|JM+`K)9UW&$=8t4QwqL`t^l5(B;lYV z*JP;fT787d4>I1NtgvONk&`AL?XQhJzG43pgTU5ma-~D zAnY@?*d!0m0SGbe&3ilEuG^p&O#-2SsWcTDu*vg9Yk?sCtsT$T1oN zY0M!~Qf<6p_9vq88WlghA=yO$(nuDBGmDCXq7ACW>mrIIfW4>|AQ+HIunZ~xLy$m8 zQHUAp44bP1Bf0^m>=0tT-&tX2^`^-KP$iB+(b*@E0k7p(xRivS24f}#($2swT)%yr z%-PvFLncV?Zf#wK%lm@(u{BN@0aT-xfuRs6e<^GVYLJSOEVmF#H4-*JMk9Tswk|{) z1(pmZ8>qk%*MG>hTssY>dVsPT|Ku%j98I~Ec;v{DTf4;d{&QF9(8k8bh?E5aLmr5^ z{mF-+Zl@Bk(dDxR$buZvYT& zs@pY~oJ}jY5UojC{j?aK9M=IAp3x>B7TtN(`t`r3&hJ+gQTxGN6g?6|2nM7*N3}rM zCY39IcAbv?04Ep0kr<1rgKXj7iBRKG;X47*QT#11_MhrzF;;0GFRBN$D>6X-m$VH1 zg0r*B1Cyv}(~Z@X#Q_D)Jg61OOd)WyXH(VrF==zh)8JIKb+YY6TtB#VM(iVPXTX+UlW=9}(*y`j1+RdYJhDx`fH5o;W~ z=@#g^th^gz!Ki@D-KjP2!B-mLM9t+<2#WI%*g&;&nCier0|k!|tkOQIh3;qkx5^5K z#BN%f8~AN8`TrdM%LLAJ0g#52UCf`e%9j`yR2&x*qcPm``Sa)LScY@gC{eSfEcnV# z(y20PcVrH|WFdXc=M8lz19VVC6RN4H>FP1+{!<}7x7(?vEM#B!bsQ07fm>R5h=){_ zyr>9^hm2e0!D4|^4Lndg8AZTzsew-il?5aS<4xVi-Hz2>X0UAVbEXB6x?b^ME zX@4koh{--7DJdp9n+>!97^1!mbBR;PZ%=3%MuwJBwTj<9fuxfMNCwE%GvFnsWn@eM z)WRH#$d5-6LL0bAsN;Q&VL{tVwtH=}J?V(w9H>s<3!Z^J7!ZV@RnrXwYQQc7<44qM zN(O%`u7Y2%@PL)W%MB;+pCfLO_~w-t%)whR2dbPha7N#OQ&uiBgKEOE_4`{qPzGRp zE~s!R505J6@3sj)B8V~S7+e)gM3M@34d7P?uV&M%@;j?M{r?pg02=uY9bt@uoq@p) zc0oZJNY4iWM%>!H+W~MIv5te33$^|_aXVmy-eTjz?ng0pLjkYzrv6)$v@=`7u}&U7 z7glCc_cua*EY%2it|Ag-Umq>}3Xnz9X|}y}QsfIESYb+m5)eQ^xy3D+Uw1~uk9hm^ zDI6U%Db0|_P#qUOh$!+1l)ZKh1uJ{A@b^E^0Xk_I=wt;?sWP-RfQJ!dy(YeIP?-4D z@CFlQA~*p=rEAQEF-zDuyCADv*%CdV7|CE)Rlagb5 zBlXr;>I4;#RbAe}>)`QCy>Vl@_93h*kC>P#RlG8_?DwdWk`iJyWrdaJ$3FJ;LQ45j zz6t{>MId)AjyKe%@!OO@NACg*p3>+r&e5^p!xPV?9jt9rcpZP;r=#EYqAnar?VP#Z zGusaxh%!~8(T?N0xV~O+*Zew!jGVc`uj{CvzQX&-uWq|-2XfC42*DlCpSytDcM~Xh z;sKVP4|e=d3MgIrT=_$P&pq>!=bzBVnIsFcC1y-`&%bsI>#%baZr;P*PfIYGQI9GBNyt8_z&b_p%7i5R?qyyFRe*U^lJc3In!G@J998jW))tuS&B>nwvnpCxI(Bn*>E#LQe!y7;lBUC><8XX!* z$1FK<>(;HJoE$}Hq_3{`WW$GPlaa6TkGT99`S9EkqQ19xR%a60@=W&p6{zJ_uYq`+ z_v+QFI1)pyIn}OLuLfZXL<}5o3H)a(1*~zW@9xCH$5X2-zmDwQ^0#^On2p)qVa)6I zZqZlxEncV!%G%M!iO1d(yAGleyvI;)=*tC(T1L#RtsjC5hfSiZt1H`U^vUbRUno=* z1^wOukLxgYp9fxv2nYVg)&3E1SfrXskin(+IyqBhjU1D@#9rLi29au-sg(I3d@3y; zSf+p%w-b|uUOa#Pe0#2LE=$HOARj(*z7ZffYx3pGA%p9F(wW|JJF5ecR^yWJ67H;k zz@xDR0>7B9rj`~@@b1Q(zQs8F79~_h7+APuvNAHZ&2B1HDp^~PMMCnnkpo8582Cw3 zU*F21ukedGTPzIVDZsJ?^Z%}emNjmsP*&4NJq%WTD}_D_6%K4D0k)Ur|NmOK_Hd~4 zH9l0^!?;$nD68nP#YM)uJO)Ojo*$VbGXdBkS1g zp@Y)FxOGre7$l}~joHsn`^Wj~JkL4L@yzp>;Wxke&F}ku-}m#r@8|t+Pxf@A``xm+ zd&tX%Y;V6Kl&+3y{9D=@Zhdh+g5m}oc~+n)qwTu3g!Dq+vkTWiDx#g=hhK~LdEhHr zANucK#I>r-p4eRZ@!lW(Oz@0axb4@rW80w?_A z#JcgM?ec3gccOcHV&&Uw8XkWB^Y?lVEW6;%sja3(pjO(bm7F6v?T($9Qe85etl0him6X!1^J2>b^meH79p_A;sUD-d{EZ-bj%KTgX z+ZhuptND8qX^7UA>tb#;372M=!CrbzPDYNIhniZA3TuM;IhZfnjjX)uspi^X!nDB9yQ zC>c`w|I}^=#U#`i(mcCLak@1C&Li(O?AzN6dKs>vpk7j`L?Yd*8i^V$wV+k8h2UWR zLY)jDkydF?`&YDI7G!wgd$q@j%M?wIErU{Pd;I_S)c-69X4b^yrZ&2FL3K+qsalV3*9L$qX~Rdacd>|Y+D#^EiSHrc|& zSL7bt12e5MwXvA$@9#ee2wo0SknF{tm4T>;G9-emiu~_9L{+oV=>I?&CLKh$)XSIe zV0cTw=huYAXvTgbO3q(vYUYE};0DO)92Hdpn(cikBtUF}Lew0zHO#}U0o1wGuV29Z z0^OIyO`xjkh=kfbC@6=RM?wTSA!!j{uh%_&`T|L}4%x)SFk+6aufQ$ z$C8{FjB?`M#cos|n&G|_TMP4RGGaiErcfwN(4G*Y z!ZHUG!{I?zjC#6@?tW!Nxn`A$0!eh~vhqCYRtc9biNVuxb$37ADH@0cgnK_x!(y;kvMCN z_2XS3J;s(z*FAeC=IGep$m^MG=-rfY<{m~pH9%}eKUfWPGNM3Ac1HW-W9#8C0j>)! zyBw3!imj)PDrJ=Mcze`Iib zDv}*lRr(vQ_pw5N9vP5gTa?yeuHSt|`mDQ6Wh*TkY!D9=BHX~$bM^Lq&w7Bi@C=Ai zifR4oDv#+yeAooj=cZ*$0cg+yRM2v8^vrnucW#Fd4^7S+El*5o=^siv96ILR9ok@~ zkDkB~5}e6ODnd1Q5EKsTbv*FG29b@hM_20T&!ak54gzm6gxO$Wi$5KK?OF{QOX7vB?^h0hfkFeHLH22iKO zMj%m;n}Eh5kTTURQCR{8Dq#%Rp&yjL?f8XRis9ZO5N*f-QOCD)X3oe)Ub@4zgcPuQM1-*3 z$+vZ>-E9$Uj`Ed($b&EtGh5uy^3&!Dr&=U0I{Bri|xp?)^ z4?9jVEdFq1ksrd=tN36m%0_#9V&`OBP>%1QP;I+LMLIsNy<}w~{1?U1u?>dn>f&-A zp7juBKf#J}tr~}1RSxXjj)UFCM|POX)mK%~W7n=p% zn2R$jJV;Vmap=hp+Op{z+x*UTvu8s_`v|X#!oU?*O%=4<_LG|c{8~UYor5bLkG3oy zDS7!3n>VMVgi35PRKHx09C`5d7HT%EQekKsa$}v9tjDG4@r|F55$S#N&2E&m-Qnml zI3WZdlpz-)A5-9#-aNVxYWCYLmDemxuR~nv7U4BjRkP4-6;=157f-lV$bRXb@VLr@ zD<`84=o}oJhr)vlHg48Yqv{>K8|e<=vCs?`fCBpW+S**uWW7+~(H7+8IpCgCvA5R1 z850h=yxfape7s>TN_9(U8x3}o7jPiTBTszSNvKy7LaZf@K-owXl@(Bgh#J8Ate*U%I6OV zrM`a{=a$8pjR?NZQGriz%yi?j>bf8qlT$KydwV$_Z;i~Q7ca0W2Pql=mpl- z0%q{2VgmuQb7xISq>JYu(Q*Vqgc<rAqFX#SsZ3F$PlyC@Geg; zug*od*S5GV^fyme=Nc`2u7!ou+r0S@&X@d%CJfG `"${arg}"`) - .join(' '); - -const services = []; - -// eslint-disable-next-line no-eval -if (!eval(process.env.E2E_NO_REPORTING)) { - services.push('serve build'); -} -// eslint-disable-next-line no-eval -if (!eval(process.env.E2E_NO_REPORTING_SERVER)) { - services.push('npm run start:reporting-server'); -} - -concurrently([...services, `wdio ${wdioArgs}`], { - killOthers: ['success', 'failure'], - successCondition: 'first', -}) - .then( - function onSuccess(/* exitInfo */) { - // This code is necessary to make sure the parent terminates - // when the application is closed successfully. - process.exit(); - }, - function onFailure(/* exitInfo */) { - // This code is necessary to make sure the parent terminates - // when the application is closed because of a failure. - process.exit(); - }, - ) - .catch((e) => { - console.error(e); - process.exitCode = -1; - }); diff --git a/packages/reporting-e2e/tests/1-logs.test.ts b/packages/reporting-e2e/tests/1-logs.test.ts deleted file mode 100644 index c90ad0f26..000000000 --- a/packages/reporting-e2e/tests/1-logs.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { rmfData } from './mock-data'; -import fetch from 'node-fetch'; - -describe('logs', () => { - it('should store the logs correctly', async () => { - const options = { - method: 'POST', - body: JSON.stringify(rmfData), - headers: { - 'Content-Type': 'application/json', - }, - }; - - let response; - try { - const res = await fetch(`http://localhost:8003/log/rmfserver`, options); - response = await res.text(); - } catch (error) { - console.log(error); - } - - expect(response).toBe('"Logs were saved correctly"'); - }); -}); diff --git a/packages/reporting-e2e/tests/2-reporting.test.ts b/packages/reporting-e2e/tests/2-reporting.test.ts deleted file mode 100644 index 71a2b7053..000000000 --- a/packages/reporting-e2e/tests/2-reporting.test.ts +++ /dev/null @@ -1,95 +0,0 @@ -import fetch from 'node-fetch'; -import { rmfData } from './mock-data'; -import { getReport, overwriteClick } from './utils'; - -describe('reporting interactions', () => { - before(() => overwriteClick()); - before(() => browser.url('/')); - - before(async () => { - const options = { - method: 'POST', - body: JSON.stringify(rmfData), - headers: { - 'Content-Type': 'application/json', - }, - }; - - try { - const res = await fetch(`http://localhost:8003/log/rmfserver`, options); - await res.text(); - } catch (error) { - console.log(error); - } - }); - - it('should retrieve dispenser state report', async () => { - const options = { - listOrder: 2, - elemName: 'div*=Dispensers', - reportTitle: 'h6*=Dispenser State', - }; - await getReport(options); - await expect($('h6*=Dispenser State')).toBeDisplayed(); - }); - - it('should retrieve door state report', async () => { - const options = { - listOrder: 3, - elemName: 'div*=Doors', - reportTitle: 'h6*=Door State', - }; - await getReport(options); - await expect($('h6*=Door State')).toBeDisplayed(); - }); - - it('should retrieve the fleet state report', async () => { - const options = { - listOrder: 4, - elemName: 'div*=Fleets', - reportTitle: 'h6*=Fleet State', - }; - await getReport(options); - await expect($('h6*=Fleet State')).toBeDisplayed(); - }); - - it('should retrieve the health report', async () => { - const options = { - listOrder: 5, - elemName: 'div*=Health', - reportTitle: 'h6*=Health', - }; - await getReport(options); - await expect($('h6*=Health')).toBeDisplayed(); - }); - - it('should retrieve ingestor state report', async () => { - const options = { - listOrder: 6, - elemName: 'div*=Ingestor', - reportTitle: 'h6*=Ingestor State', - }; - await getReport(options); - await expect($('h6*=Ingestor State')).toBeDisplayed(); - }); - - it('should retrieve lift state report', async () => { - const options = { - listOrder: 7, - elemName: 'div*=Lifts', - reportTitle: 'h6*=Lift State', - }; - await getReport(options); - await expect($('h6*=Lift State')).toBeDisplayed(); - }); - - it('should retrieve the task summary report', async () => { - const options = { - listOrder: 8, - elemName: 'div*=Tasks', - reportTitle: 'h6*=Task', - }; - await getReport(options); - await expect($('h6*=Task')).toBeDisplayed(); - }); -}); diff --git a/packages/reporting-e2e/tests/mock-data.ts b/packages/reporting-e2e/tests/mock-data.ts deleted file mode 100644 index 940b4a304..000000000 --- a/packages/reporting-e2e/tests/mock-data.ts +++ /dev/null @@ -1,147 +0,0 @@ -export const rmfData = [ - { - log: - 'INFO:app.BookKeeper.dispenser_state:{"time": {"sec": 1600, "nanosec": 0}, "guid": "coke_dispenser", "mode": 0, "request_guid_queue": [], "seconds_remaining": 0.0}\n', - stream: 'stdout', - kubernetes: { - container_name: 'app-that-writes-logs', - namespace_name: 'default', - pod_name: 'app-that-writes-logs', - container_image: 'busybox:latest', - container_image_id: - 'docker-pullable://busybox@sha256:ae39a6f5c07297d7ab64dbd4f82c77c874cc6a94cea29fdec309d0992574b4f7', - pod_id: '978761c6-2a19-422f-b710-d43da2348f1f', - host: 'minikube', - master_url: 'https://10.96.0.1:443/api', - namespace_id: 'e192acd4-e6e7-46c2-8514-44a27a367749', - }, - }, - { - log: - 'INFO:app.BookKeeper.door_state:{"door_time": {"sec": 1596, "nanosec": 548000000}, "door_name": "hardware_door", "current_mode": {"value": 0}}\n', - stream: 'stdout', - }, - { - log: - 'INFO:app.BookKeeper.fleet_state:{"name": "tinyRobot", "robots": [{"name": "tinyRobot1", "model": "", "task_id": "", "seq": 3194, "mode": {"mode": 1, "mode_request_id": 0}, "battery_percent": 100.0, "location": {"t": {"sec": 1600, "nanosec": 189000000}, "x": 11.55367374420166, "y": -11.317498207092285, "yaw": -1.5998055934906006, "level_name": "L1", "index": 0}, "path": []}, {"name": "tinyRobot2", "model": "", "task_id": "", "seq": 3194, "mode": {"mode": 1, "mode_request_id": 0}, "battery_percent": 100.0, "location": {"t": {"sec": 1600, "nanosec": 189000000}, "x": 15.15751838684082, "y": -11.22861385345459, "yaw": -1.5839799642562866, "level_name": "L1", "index": 0}, "path": []}]}\n', - stream: 'stdout', - }, - { - log: - 'INFO:app.BookKeeper.door_health:{"id": "hardware_door", "health_status": "HealthStatus.HEALTHY", "health_message": null}\n', - stream: 'stdout', - }, - { - log: - 'INFO:app.BookKeeper.ingestor_state:{"time": {"sec": 1600, "nanosec": 0}, "guid": "coke_ingestor", "mode": 0, "request_guid_queue": [], "seconds_remaining": 0.0}\n', - stream: 'stdout', - }, - { - log: - 'INFO:app.BookKeeper.lift_state: {"lift_name": "test_lift", "lift_time": 0, "available_floors": ["L1", "L2"], "current_floor": "L1", "destination_floor": "L2", "door_state": 0, "motion_state": 0, "available_modes": [0], "current_mode": 0, "session_id": "test_session"}\n', - stream: 'stdout', - }, - { - log: - 'INFO:app.BookKeeper.task_summary:{"fleet_name": "tinyRobot", "task_id": "Loop0", "task_profile": {"task_id": "Loop0", "submission_time": {"sec": 131, "nanosec": 553000000}, "description": {"start_time": {"sec": 1623383402, "nanosec": 0}, "priority": {"value": 0}, "task_type": {"type": 1}, "station": {"task_id": "", "robot_type": "", "place_name": ""}, "loop": {"task_id": "", "robot_type": "", "num_loops": 1, "start_name": "supplies", "finish_name": "coe"}, "delivery": {"task_id": "", "items": [], "pickup_place_name": "", "pickup_dispenser": "", "pickup_behavior": {"name": "", "parameters": []}, "dropoff_place_name": "", "dropoff_ingestor": "", "dropoff_behavior": {"name": "", "parameters": []}}, "clean": {"start_waypoint": ""}}}, "state": 0, "status": "test_status", "submission_time": {"sec": 0, "nanosec": 0}, "start_time": {"sec": 1623383362, "nanosec": 348338289}, "end_time": {"sec": 1623383449, "nanosec": 79154833}, "robot_name": "tinyRobot2"}', - stream: 'stdout', - }, - { - log: - 'INFO:app.BookKeeper.task_summary:{"fleet_name": "tinyRobot", "task_id": "Delivery1", "task_profile": {"task_id": "Delivery1", "submission_time": {"sec": 132, "nanosec": 553000098}, "description": {"start_time": {"sec": 1623383487, "nanosec": 0}, "priority": {"value": 0}, "task_type": {"type": 2}, "station": {"task_id": "", "robot_type": "", "place_name": ""}, "loop": {"task_id": "", "robot_type": "", "num_loops": "", "start_name": "", "finish_name": ""}, "delivery": {"task_id": "", "items": ["item1", "item2"], "pickup_place_name": "pantry", "pickup_dispenser": "coke_dispenser", "pickup_behavior": {"name": "", "parameters": []}, "dropoff_place_name": "lounge", "dropoff_ingestor": "ingestor", "dropoff_behavior": {"name": "", "parameters": []}}, "clean": {"start_waypoint": ""}}}, "state": 0, "status": "test_status2", "submission_time": {"sec": 0, "nanosec": 0}, "start_time": {"sec": 1623383362, "nanosec": 348338289}, "end_time": {"sec": 1623383449, "nanosec": 79154833}, "robot_name": "tinyRobot1"}', - stream: 'stdout', - }, - { - log: - 'INFO:app.BookKeeper.task_summary:{"fleet_name": "tinyRobot", "task_id": "Clean2", "task_profile": {"task_id": "Clean2", "submission_time": {"sec": 131, "nanosec": 552120070}, "description": {"start_time": {"sec": 145383402, "nanosec": 0}, "priority": {"value": 0}, "task_type": {"type": 4}, "station": {"task_id": "", "robot_type": "", "place_name": ""}, "loop": {"task_id": "", "robot_type": "", "num_loops": "", "start_name": "", "finish_name": ""}, "delivery": {"task_id": "", "items": [], "pickup_place_name": "", "pickup_dispenser": "", "pickup_behavior": {"name": "", "parameters": []}, "dropoff_place_name": "", "dropoff_ingestor": "", "dropoff_behavior": {"name": "", "parameters": []}}, "clean": {"start_waypoint": "cleanzone"}}}, "state": 0, "status": "test_status3", "submission_time": {"sec": 0, "nanosec": 0}, "start_time": {"sec": 1623283162, "nanosec": 348332939}, "end_time": {"sec": 162593449, "nanosec": 79154833}, "robot_name": "tinyRobot3"}', - stream: 'stdout', - }, -]; - -export const dispenserStateData = [ - { - log: - 'INFO:app.BookKeeper.dispenser_state:{"time": {"sec": 1600, "nanosec": 0}, "guid": "coke_dispenser", "mode": 0, "request_guid_queue": [], "seconds_remaining": 0.0}\n', - stream: 'stdout', - kubernetes: { - container_name: 'app-that-writes-logs', - namespace_name: 'default', - pod_name: 'app-that-writes-logs', - container_image: 'busybox:latest', - container_image_id: - 'docker-pullable://busybox@sha256:ae39a6f5c07297d7ab64dbd4f82c77c874cc6a94cea29fdec309d0992574b4f7', - pod_id: '978761c6-2a19-422f-b710-d43da2348f1f', - host: 'minikube', - master_url: 'https://10.96.0.1:443/api', - namespace_id: 'e192acd4-e6e7-46c2-8514-44a27a367749', - }, - }, -]; - -export const doorStateData = [ - { - log: - 'INFO:app.BookKeeper.door_state:{"door_time": {"sec": 1596, "nanosec": 548000000}, "door_name": "hardware_door", "current_mode": {"value": 0}}\n', - stream: 'stdout', - }, -]; - -export const fleetStateData = [ - { - log: - 'INFO:app.BookKeeper.fleet_state:{"name": "tinyRobot", "robots": [{"name": "tinyRobot1", "model": "", "task_id": "", "seq": 3194, "mode": {"mode": 1, "mode_request_id": 0}, "battery_percent": 100.0, "location": {"t": {"sec": 1600, "nanosec": 189000000}, "x": 11.55367374420166, "y": -11.317498207092285, "yaw": -1.5998055934906006, "level_name": "L1", "index": 0}, "path": []}, {"name": "tinyRobot2", "model": "", "task_id": "", "seq": 3194, "mode": {"mode": 1, "mode_request_id": 0}, "battery_percent": 100.0, "location": {"t": {"sec": 1600, "nanosec": 189000000}, "x": 15.15751838684082, "y": -11.22861385345459, "yaw": -1.5839799642562866, "level_name": "L1", "index": 0}, "path": []}]}\n', - stream: 'stdout', - }, -]; - -export const healthData = [ - { - log: - 'INFO:app.BookKeeper.door_health:{"id": "hardware_door", "health_status": "HealthStatus.HEALTHY", "health_message": null}\n', - stream: 'stdout', - }, -]; - -export const ingestorData = [ - { - log: - 'INFO:app.BookKeeper.ingestor_state:{"time": {"sec": 1600, "nanosec": 0}, "guid": "coke_ingestor", "mode": 0, "request_guid_queue": [], "seconds_remaining": 0.0}\n', - stream: 'stdout', - }, -]; - -export const liftsStateData = [ - { - log: - 'INFO:app.BookKeeper.lift_state: {"lift_name": "test_lift", "lift_time": 0, "available_floors": ["L1", "L2"], "current_floor": "L1", "destination_floor": "L2", "door_state": 0, "motion_state": 0, "available_modes": [0], "current_mode": 0, "session_id": "test_session"}\n', - stream: 'stdout', - }, -]; - -export const taskSummaryData = [ - { - log: - 'INFO:app.BookKeeper.task_summary:{"fleet_name": "tinyRobot", "task_id": "Loop0", "task_profile": {"task_id": "Loop0", "submission_time": {"sec": 131, "nanosec": 553000000}, "description": {"start_time": {"sec": 1623383402, "nanosec": 0}, "priority": {"value": 0}, "task_type": {"type": 1}, "station": {"task_id": "", "robot_type": "", "place_name": ""}, "loop": {"task_id": "", "robot_type": "", "num_loops": 1, "start_name": "supplies", "finish_name": "coe"}, "delivery": {"task_id": "", "items": [], "pickup_place_name": "", "pickup_dispenser": "", "pickup_behavior": {"name": "", "parameters": []}, "dropoff_place_name": "", "dropoff_ingestor": "", "dropoff_behavior": {"name": "", "parameters": []}}, "clean": {"start_waypoint": ""}}}, "state": 0, "status": "test_status", "submission_time": {"sec": 0, "nanosec": 0}, "start_time": {"sec": 1623383362, "nanosec": 348338289}, "end_time": {"sec": 1623383449, "nanosec": 79154833}, "robot_name": "tinyRobot2"}', - stream: 'stdout', - }, - { - log: - 'INFO:app.BookKeeper.task_summary:{"fleet_name": "tinyRobot", "task_id": "Delivery1", "task_profile": {"task_id": "Delivery1", "submission_time": {"sec": 132, "nanosec": 553000098}, "description": {"start_time": {"sec": 1623383487, "nanosec": 0}, "priority": {"value": 0}, "task_type": {"type": 2}, "station": {"task_id": "", "robot_type": "", "place_name": ""}, "loop": {"task_id": "", "robot_type": "", "num_loops": "", "start_name": "", "finish_name": ""}, "delivery": {"task_id": "", "items": ["item1", "item2"], "pickup_place_name": "pantry", "pickup_dispenser": "coke_dispenser", "pickup_behavior": {"name": "", "parameters": []}, "dropoff_place_name": "lounge", "dropoff_ingestor": "ingestor", "dropoff_behavior": {"name": "", "parameters": []}}, "clean": {"start_waypoint": ""}}}, "state": 0, "status": "test_status2", "submission_time": {"sec": 0, "nanosec": 0}, "start_time": {"sec": 1623383362, "nanosec": 348338289}, "end_time": {"sec": 1623383449, "nanosec": 79154833}, "robot_name": "tinyRobot1"}', - stream: 'stdout', - }, - { - log: - 'INFO:app.BookKeeper.task_summary:{"fleet_name": "tinyRobot", "task_id": "Clean2", "task_profile": {"task_id": "Clean2", "submission_time": {"sec": 131, "nanosec": 552120070}, "description": {"start_time": {"sec": 145383402, "nanosec": 0}, "priority": {"value": 0}, "task_type": {"type": 4}, "station": {"task_id": "", "robot_type": "", "place_name": ""}, "loop": {"task_id": "", "robot_type": "", "num_loops": "", "start_name": "", "finish_name": ""}, "delivery": {"task_id": "", "items": [], "pickup_place_name": "", "pickup_dispenser": "", "pickup_behavior": {"name": "", "parameters": []}, "dropoff_place_name": "", "dropoff_ingestor": "", "dropoff_behavior": {"name": "", "parameters": []}}, "clean": {"start_waypoint": "cleanzone"}}}, "state": 0, "status": "test_status3", "submission_time": {"sec": 0, "nanosec": 0}, "start_time": {"sec": 1623283162, "nanosec": 348332939}, "end_time": {"sec": 162593449, "nanosec": 79154833}, "robot_name": "tinyRobot3"}', - stream: 'stdout', - }, -]; - -export const singleLog = [ - { - log: - 'INFO:app.BookKeeper.task_summary:{"fleet_name": "tinyRobot", "task_id": "Clean2", "task_profile": {"task_id": "Clean2", "submission_time": {"sec": 131, "nanosec": 552120070}, "description": {"start_time": {"sec": 145383402, "nanosec": 0}, "priority": {"value": 0}, "task_type": {"type": 4}, "station": {"task_id": "", "robot_type": "", "place_name": ""}, "loop": {"task_id": "", "robot_type": "", "num_loops": "", "start_name": "", "finish_name": ""}, "delivery": {"task_id": "", "items": [], "pickup_place_name": "", "pickup_dispenser": "", "pickup_behavior": {"name": "", "parameters": []}, "dropoff_place_name": "", "dropoff_ingestor": "", "dropoff_behavior": {"name": "", "parameters": []}}, "clean": {"start_waypoint": "cleanzone"}}}, "state": 0, "status": "test_status3", "submission_time": {"sec": 0, "nanosec": 0}, "start_time": {"sec": 1623283162, "nanosec": 348332939}, "end_time": {"sec": 162593449, "nanosec": 79154833}, "robot_name": "tinyRobot3"}', - stream: 'stdout', - }, -]; - -export const userData = []; diff --git a/packages/reporting-e2e/tests/utils.ts b/packages/reporting-e2e/tests/utils.ts deleted file mode 100644 index 00eaec060..000000000 --- a/packages/reporting-e2e/tests/utils.ts +++ /dev/null @@ -1,85 +0,0 @@ -import fetch from 'node-fetch'; - -/** - * Overwrites the default click command to wait for animation to finish before attempting to click, - * this can fix flaky tests where the click is missed as the position changes as the animation is - * running. - */ -export function overwriteClick(): void { - browser.overwriteCommand( - 'click', - async function (this: WebdriverIO.Element, origClick) { - await this.waitForClickable(); - let prevLocation = await this.getLocation(); - await this.waitUntil(async () => { - const newLocation = await this.getLocation(); - const stablized = prevLocation.x === newLocation.x && prevLocation.y === newLocation.y; - prevLocation = newLocation; - return stablized; - }); - return origClick(); - }, - true, - ); -} - -/** - * Return a list of backspace characters. This is only used in case we want to delete characters from the Autocomplete material-ui component - */ -export function removeTextFromAutocomplete(characterNum: number): string { - const backspace = '\u0008'; - let backspaces = ''; - for (let index = 0; index < characterNum; index++) { - backspaces += backspace; - } - return backspaces; -} - -export const populateDatabase = async ( - data: { log: string; stream: string }[], -): Promise => { - const options = { - method: 'POST', - body: JSON.stringify(data), - headers: { - 'Content-Type': 'application/json', - }, - }; - - try { - const res = await fetch('http:localhost:8003/log/rmfserver', options); - return await res.json(); - } catch (error) { - return error as Error; - } -}; - -export const selectDateAndRetrieveLogs = async (): Promise => { - const datePickerIconButton = await (await $('.MuiInputBase-root')).$('.MuiIconButton-root'); - await datePickerIconButton.click(); - const prevMonthButton = (await $$('.MuiPickersCalendarHeader-iconButton'))[0]; - await prevMonthButton.click(); - const dayOneButton = await $('button=1'); - await dayOneButton.click(); - await (await $('body')).click(); - await (await $('button=Retrieve Logs')).click(); - await browser.pause(1000); -}; - -export const getReport = async (options: { - listOrder: number; - elemName: string; - reportTitle: string; -}): Promise => { - await browser.waitUntil( - async () => (await (await $('.MuiList-root')).waitForDisplayed()) === true, - ); - const targetButton = await ( - await $(`.MuiList-root .MuiListItem-root:nth-child(${options.listOrder})`) - ).$(options.elemName); - await targetButton.click(); - await selectDateAndRetrieveLogs(); - await browser.waitUntil( - async () => (await (await $(options.reportTitle)).waitForDisplayed({ timeout: 5000 })) === true, - ); -}; diff --git a/packages/reporting-e2e/tsconfig.json b/packages/reporting-e2e/tsconfig.json deleted file mode 100644 index c77ffd695..000000000 --- a/packages/reporting-e2e/tsconfig.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "compilerOptions": { - /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ - "target": "es2019", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - // "outDir": "./", /* Redirect output structure to the directory. */ - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - "types": ["node", "webdriverio/async", "@wdio/mocha-framework", "expect-webdriverio"], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - } -} diff --git a/packages/reporting-e2e/wdio.conf.js b/packages/reporting-e2e/wdio.conf.js deleted file mode 100644 index ee7f1b093..000000000 --- a/packages/reporting-e2e/wdio.conf.js +++ /dev/null @@ -1,291 +0,0 @@ -const path = require('path'); -const fs = require('fs'); -const os = require('os'); -const { execSync } = require('child_process'); - -const headlessArgs = process.env.CI ? ['--headless', '--disable-gpu'] : []; -const chromeArgs = [...headlessArgs]; -if (os.userInfo().uid === 0) { - chromeArgs.push('--no-sandbox'); -} - -exports.config = { - // - // ==================== - // Runner Configuration - // ==================== - // - // WebdriverIO allows it to run your tests in arbitrary locations (e.g. locally or - // on a remote machine). - runner: 'local', - // - // ================== - // Specify Test Files - // ================== - // Define which test specs should run. The pattern is relative to the directory - // from which `wdio` was called. Notice that, if you are calling `wdio` from an - // NPM script (see https://docs.npmjs.com/cli/run-script) then the current working - // directory is where your package.json resides, so `wdio` will be called from there. - // - specs: ['tests/**/*.test.ts'], - // Patterns to exclude. - exclude: [ - // 'path/to/excluded/files' - ], - // - // ============ - // Capabilities - // ============ - // Define your capabilities here. WebdriverIO can run multiple capabilities at the same - // time. Depending on the number of capabilities, WebdriverIO launches several test - // sessions. Within your capabilities you can overwrite the spec and exclude options in - // order to group specific specs to a specific capability. - // - // First, you can define how many instances should be started at the same time. Let's - // say you have 3 different capabilities (Chrome, Firefox, and Safari) and you have - // set maxInstances to 1; wdio will spawn 3 processes. Therefore, if you have 10 spec - // files and you set maxInstances to 10, all spec files will get tested at the same time - // and 30 processes will get spawned. The property handles how many capabilities - // from the same test should run tests. - // - maxInstances: 1, - // - // If you have trouble getting all important capabilities together, check out the - // Sauce Labs platform configurator - a great tool to configure your capabilities: - // https://docs.saucelabs.com/reference/platforms-configurator - // - capabilities: [ - { - // maxInstances can get overwritten per capability. So if you have an in-house Selenium - // grid with only 5 firefox instances available you can make sure that not more than - // 5 instances get started at a time. - maxInstances: 1, - // - browserName: 'chrome', - // If outputDir is provided WebdriverIO can capture driver session logs - // it is possible to configure which logTypes to include/exclude. - // excludeDriverLogs: ['*'], // pass '*' to exclude all driver session logs - // excludeDriverLogs: ['bugreport', 'server'], - - acceptInsecureCerts: true, - - 'goog:chromeOptions': { - binary: process.env.CHROME_BIN || undefined, - // to run chrome headless the following flags are required - // (see https://developers.google.com/web/updates/2017/04/headless-chrome) - args: [...chromeArgs, '--window-size=1366,768'], - }, - }, - ], - // - // =================== - // Test Configurations - // =================== - // Define all options that are relevant for the WebdriverIO instance here - // - // Level of logging verbosity: trace | debug | info | warn | error | silent - logLevel: 'warn', - // - // Set specific log levels per logger - // loggers: - // - webdriver, webdriverio - // - @wdio/applitools-service, @wdio/browserstack-service, @wdio/devtools-service, @wdio/sauce-service - // - @wdio/mocha-framework, @wdio/jasmine-framework - // - @wdio/local-runner, @wdio/lambda-runner - // - @wdio/sumologic-reporter - // - @wdio/cli, @wdio/config, @wdio/sync, @wdio/utils - // Level of logging verbosity: trace | debug | info | warn | error | silent - // logLevels: { - // webdriver: 'info', - // '@wdio/applitools-service': 'info' - // }, - // - // If you only want to run your tests until a specific amount of tests have failed use - // bail (default is 0 - don't bail, run all tests). - bail: 1, - // - // Set a base URL in order to shorten url command calls. If your `url` parameter starts - // with `/`, the base url gets prepended, not including the path portion of your baseUrl. - // If your `url` parameter starts without a scheme or `/` (like `some/path`), the base url - // gets prepended directly. - baseUrl: process.env.E2E_REPORTING_URL, - // - // Default timeout for all waitFor* commands. - waitforTimeout: 10000, - // - // Default timeout in milliseconds for request - // if browser driver or grid doesn't send response - connectionRetryTimeout: 120000, - // - // Default request retries count - connectionRetryCount: 3, - // - // Test runner services - // Services take over a specific job you don't want to take care of. They enhance - // your test setup with almost no effort. Unlike plugins, they don't add new - // commands. Instead, they hook themselves up into the test process. - services: [], - - // Framework you want to run your specs with. - // The following are supported: Mocha, Jasmine, and Cucumber - // see also: https://webdriver.io/docs/frameworks.html - // - // Make sure you have the wdio adapter package for the specific framework installed - // before running any tests. - framework: 'mocha', - // - // The number of times to retry the entire specfile when it fails as a whole - // specFileRetries: 1, - // - // Whether or not retried specfiles should be retried immediately or deferred to the end of the queue - // specFileRetriesDeferred: false, - // - // Test reporter for stdout. - // The only one supported by default is 'dot' - // see also: https://webdriver.io/docs/dot-reporter.html - reporters: ['spec'], - - // - // Options to be passed to Mocha. - // See the full list at http://mochajs.org/ - mochaOpts: { - // as of wdio 6.12.1, it automatically registers ts-node, registering it again would cause conflict - // require: ['ts-node/register'], - ui: 'bdd', - timeout: 60000, - }, - // - // ===== - // Hooks - // ===== - // WebdriverIO provides several hooks you can use to interfere with the test process in order to enhance - // it and to build services around it. You can either apply a single function or an array of - // methods to it. If one of them returns with a promise, WebdriverIO will wait until that promise got - // resolved to continue. - /** - * Gets executed once before all workers get launched. - * @param {Object} config wdio configuration object - * @param {Array.} capabilities list of capabilities details - */ - // onPrepare: function (config, capabilities) { - // }, - /** - * Gets executed before a worker process is spawned and can be used to initialise specific service - * for that worker as well as modify runtime environments in an async fashion. - * @param {String} cid capability id (e.g 0-0) - * @param {[type]} caps object containing capabilities for session that will be spawn in the worker - * @param {[type]} specs specs to be run in the worker process - * @param {[type]} args object that will be merged with the main configuration once worker is initialised - * @param {[type]} execArgv list of string arguments passed to the worker process - */ - // onWorkerStart: function (cid, caps, specs, args, execArgv) { - // }, - /** - * Gets executed just before initialising the webdriver session and test framework. It allows you - * to manipulate configurations depending on the capability or spec. - * @param {Object} config wdio configuration object - * @param {Array.} capabilities list of capabilities details - * @param {Array.} specs List of spec file paths that are to be run - */ - // beforeSession: function (config, capabilities, specs) { - // }, - /** - * Gets executed before test execution begins. At this point you can access to all global - * variables like `browser`. It is the perfect place to define custom commands. - * @param {Array.} capabilities list of capabilities details - * @param {Array.} specs List of spec file paths that are to be run - */ - // before: function (capabilities, specs) { - // }, - /** - * Runs before a WebdriverIO command gets executed. - * @param {String} commandName hook command name - * @param {Array} args arguments that command would receive - */ - // beforeCommand: function (commandName, args) { - // }, - /** - * Hook that gets executed before the suite starts - * @param {Object} suite suite details - */ - // beforeSuite: function (suite) { - // }, - /** - * Function to be executed before a test (in Mocha/Jasmine) starts. - */ - // beforeTest: function (test, context) { - // }, - /** - * Hook that gets executed _before_ a hook within the suite starts (e.g. runs before calling - * beforeEach in Mocha) - */ - // beforeHook: function (test, context) { - // }, - /** - * Hook that gets executed _after_ a hook within the suite starts (e.g. runs after calling - * afterEach in Mocha) - */ - // afterHook: function (test, context, { error, result, duration, passed, retries }) { - // }, - /** - * Function to be executed after a test (in Mocha/Jasmine). - */ - afterTest: async function (test /*, context, { error, result, duration, passed, retries }*/) { - const testPath = path.relative('tests', test.file); - const artifactDir = `artifacts/${testPath}/${test.title}`; - fs.mkdirSync(artifactDir, { recursive: true }); - await browser.saveScreenshot(`${artifactDir}/end.png`); - }, - - /** - * Hook that gets executed after the suite has ended - * @param {Object} suite suite details - */ - // afterSuite: function (suite) { - // }, - /** - * Runs after a WebdriverIO command gets executed - * @param {String} commandName hook command name - * @param {Array} args arguments that command would receive - * @param {Number} result 0 - command success, 1 - command error - * @param {Object} error error object if any - */ - // afterCommand: function (commandName, args, result, error) { - // }, - /** - * Gets executed after all tests are done. You still have access to all global variables from - * the test. - * @param {Number} result 0 - test pass, 1 - test fail - * @param {Array.} capabilities list of capabilities details - * @param {Array.} specs List of spec file paths that ran - */ - // after: function (result, capabilities, specs) { - // }, - /** - * Gets executed right after terminating the webdriver session. - * @param {Object} config wdio configuration object - * @param {Array.} capabilities list of capabilities details - * @param {Array.} specs List of spec file paths that ran - */ - // afterSession: function (config, capabilities, specs) { - // }, - /** - * Gets executed after all workers got shut down and the process is about to exit. An error - * thrown in the onComplete hook will result in the test run failing. - * @param {Object} exitCode 0 - success, 1 - fail - * @param {Object} config wdio configuration object - * @param {Array.} capabilities list of capabilities details - * @param {} results object containing test results - */ - onComplete: function (/* exitCode, config, capabilities, results */) { - // FIXME: This is very dangerous. Also force killing the process is definitely not a right way to close it. - execSync('kill -9 `pgrep reporting`'); - }, - /** - * Gets executed when a refresh happens. - * @param {String} oldSessionId session ID of the old session - * @param {String} newSessionId session ID of the new session - */ - //onReload: function(oldSessionId, newSessionId) { - //} -}; diff --git a/packages/reporting-server/.coverage b/packages/reporting-server/.coverage deleted file mode 100644 index 40ada75b8e02acbf3da58172d7fc968dcc233601..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 zcmeI4ZH(MT8G!AzZ@u2Hxw|DjB}a7rgD$7u-sTdTHc8uXz)75138hI3O1V1T-Pv9D zy!OWSUJ|5&oK&Q!{3stns>F{XQ7R=;RjKd?Ay7s6!H1A&f3zS~fgMuj~%_!^tsk>+_vFs`-MqC6on6Inji=&{0s0; zHU$E5vID+25Z*4R3QI?RQDFB7`Se!>c3tek(mP|5u=zo~vX_k?o4YQYKGhyW2F z0z`lagam@4d1YqjPVw9WzEQQf?;17kMsDFFcdf1*U)7GUeE7~)Ejp&{$!f5b%i4rX3g+TyQ%ptp2Y5YypAIt9D^|rBQAyMF{GPyNagb;WYKZWw&9-D zHu%}aFhVTN=V$!r0A#|=rj0SQJ#q2{&E*a5a=XU8NQ*sYeIdJW{<-N*Z)cPqG z!(!OZqK1V43-~}TJ#(-m3SgD|jCaa{3oqU1`cAm7L*?ts;N%~i$|y5)bK-?lp`joi zy=wYiFQ5(?P4DnFri16Vw;OCF!$yLw$g(u25jGi2twogs);!o|DhUk3#fGLiaYWGc zU9~n;7Ie_6mQx+Jwa{Wb4h;nQf+Sj_YuB);cvyy-v&mhf$(Q1@QMd4J8xok#vYMV* zo!icIdM2PR_k!7AXIhz=ofXfip&7-s6?@8%2_-dom2NaS)#irRb(4MZcF! z+DLo`ic?n7Gb^*(6(^3TFUNsQpvcP1jvZnUwFvB&@INtB2t3kn0#^(KZ(aS4;kUG{ zy5nI`e10N5b9l#gilYkpGP>#Wccns=FDN1XHgx*jp$Ns!rDr?H6}L^Te^IuWyt=e?MUlu@=JU(7ZvAcPQD>=39n`osT!K zRUOCTh8+zF5OK`|QKqMbqPGr4NBVhqXEBfF=6tA1GNxefejM6b(ySoRZX0$z9;R^g zjdF!9AKN6#iTVymsLexL^q^&4k!O-=d=@*ZB>$xjpuk+)Mm=ifSQi61o^J6i*+qlU zM-89*W}9mmB~&J~r_+X~)m#oIVF+EAm)@-Qv6A#>Y5g-CYfCvx)B0vO)z#xIVEbV5=!xMXVNz#t}`0&8Kz5ABSdp}rSKB(>Y5%_;4ke7Cg$z2IKBkd6Jri7G}X2tjpL@FokR+F0#xc*~QfX#p8vS3r<1IKb+s0yO=wceKq??c2>Qpek}9H%tH{3HX=X-hyW2F0z}|CBXFW5 z3&Fvm#fqlsR~*l6T(LM&=`BFGyyLj|0fw^2UAO?LxZLygI6SZ@adH~+UL9fHb>1+# zmaoG*#0|3v%O0Pa0tvT`P=e9v^m9KsIb!`?c+nT$e+6C$5cGE#NT`iaf6N(HiyYU4 zg`$q(LZ#?+(}SvOaTf%7MG&|#E`gTQ)WbJx;SFEC1uq3#q0sdL2t6`Np)p602W6_} zA^Wv4WUuR{ZTjK*+TA&jQ5m5OFf>rTorP@m5oSA7|B;zhT;sGJk?N=*j*nTKWj3HQ z@Zt4pD4?GKiS02}50~J|! z29S1Tkm!uLkl0gk8~d!peryTE8eUU$S3R*RHb*9x5&oAOb{y2oM1x zAPD!$!9j6^7d!*=|B@jGtE0?&%lv@92nykJJ8OhmK+=#o4f%*sS_~nsv{kDd-H$#{vTb~5dk7V1c(3;AOb{y2oM1x zKm>>Y5xAxaNTMVZaQ$CouM6;_jR+6{B0vO)01+SpM1Tko0U|&IhyW3|1_?+~LB;j| zX|^J;f3m-_Kd@i17ue6(57~Fw)9eZMHTD(u5c@Q<*eBQ>5Q#P-Km>>Y5g-CYfCvx) zB0vO)01+Sp*DHa{v@ELA)3<)>k?a(NZkW3LKQ}*LDosLo&*Z<@W3NAR`-{q}=l}5x z`%Ip}!CmZ)xyvuDKP%>oxL3U4g{OD^`jv9FfQbvAJ9AQ3(s>9M^Jz5){`+#@d*I@~ zvspZyJ#a)2GKvb}N%g>-lEFX*0tyBc2&6HPhQI^{CLkbVKt3>+mLO1+-bkm=Po*YA zSp^^0|EJl50(%X<|Njd6ExXKKWIty=W|uyR8xbG^M1Tko z0U|&IhyW2F0z`la5CJ0awh7>*U7Vf{y{W0to16?i#zL=H481}j^z!-8%jH5Zn+-ix z4ZTbz^px;MfS68)dlM6(C(EHHNuifY$#4T8T>lp)-?r+MkO&X~B0vO)01+SpM1Tko z0U|&IhyW3I4-mlhf13Zl2P%qGBmzW$2oM1xKm>>Y5g-CYfCvx)BJe*D!1w=4?Cbda z|KH&Y0Doq`V=uFp;2nVH;X437V$ZVgv+uxr08g?$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=100 - -# Maximum number of lines in a module. -max-module-lines=1000 - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[SIMILARITIES] - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[STRING] - -# This flag controls whether inconsistent-quotes generates a warning when the -# character used as a quote delimiter is used inconsistently within a module. -check-quote-consistency=no - -# This flag controls whether the implicit-str-concat should generate a warning -# on implicit string concatenation in sequences defined over several lines. -check-str-concat-over-line-jumps=no - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: none. To make it work, -# install the python-enchant package. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains the private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to the private dictionary (see the -# --spelling-private-dict-file option) instead of raising a message. -spelling-store-unknown-words=no - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME, - XXX, - TODO - -# Regular expression of note tags to take in consideration. -#notes-rgx= - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io - - -[IMPORTS] - -# List of modules that can be imported at any level, not just the top level -# one. -allow-any-import-level= - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - -# Deprecated modules which should not be used, separated by a comma. -deprecated-modules=optparse,tkinter.tix - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled). -ext-import-graph= - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled). -import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled). -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant - -# Couples of modules and preferred modules, separated by a comma. -preferred-modules= - - -[DESIGN] - -# Maximum number of arguments for function / method. -max-args=5 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Maximum number of boolean expressions in an if statement (see R0916). -max-bool-expr=5 - -# Maximum number of branch for function / method body. -max-branches=12 - -# Maximum number of locals for function / method body. -max-locals=15 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of return / yield for function / method body. -max-returns=6 - -# Maximum number of statements in function / method body. -max-statements=50 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - - -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - __post_init__ - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=cls - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception diff --git a/packages/reporting-server/LICENSE b/packages/reporting-server/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/packages/reporting-server/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/packages/reporting-server/README.md b/packages/reporting-server/README.md deleted file mode 100644 index 88aa0a8c7..000000000 --- a/packages/reporting-server/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# Description - -This project is about a server that exposes two APIs, one for writing logs to a persistent storage and the other for generating reports. As the project's name says, the idea is to work as a reporting server. The reporting server is designed to receive data through [Fluentd](https://www.fluentd.org/) (a data collection tool) from different pods within a Kubernetes cluster. Log data is transformed via a parser from the format that Fluentd uses for storage in the server. You can find the log formats [here](https://github.com/open-rmf/rmf-web/blob/main/packages/reporting-server/rest_server/__mocks__/raw_data.py). - -In the following image, we can observe how all the pods interact with the reporting server -![rmf-web kubernetes cluster diagram](https://user-images.githubusercontent.com/28668944/123916706-8b56e300-d9b4-11eb-990f-69e717f87b38.png) - - -# Setup - -Install pipenv - -```bash -pip3 install pipenv -``` - -If not already done so, [bootstrap](../../README.md#bootstrap) the project, you can use - -```bash -scripts/bootstrap.sh reporting-server -``` - -to bootstrap only this package. - -# Run the server - -```bash -reporting_server -``` - -When you run this command, two instances of the reporting server will run. One on port 8002 where the endpoints will be enabled to ask for reports and 8003 where the endpoints will be enabled to send logs to the reporting server. - -![image](https://user-images.githubusercontent.com/11761240/123881439-b12bab80-d912-11eb-987a-77591add6c5d.png) - -For development we recommend running this command: - -```bash -uvicorn --reload rest_server.app:get_app -``` - -This would only create one instance of the reporting-server and it'll serve on the default port. - -## Configuration - -Config files are python modules that export a variable named `config`. See [default_config.py](rest_server/default_config.py) for an example and list of the options available. All options are REQUIRED unless specified otherwise. - -Configuration is read from the file specified in the env `RMF_REPORT_REST_SERVER_CONFIG`, if not provided, the default config is used. - -e.g. -```bash -RMF_REPORT_REST_SERVER_CONFIG='my_config.py' reporting_server -``` - - -## Supported databases - -`reporting-server` uses [tortoise-orm](https://github.com/tortoise/tortoise-orm/) to perform database operations. Currently, the supported databases are - -* PostgreSQL -* SQLite -* MySQL -* MariaDB - -by default it uses a in-memory sqlite instance, to use other databases, install rmf-server with the relevalent extras - -* PostgreSQL - postgres -* MySQL - mysql -* MariaDB - maria - -.e.g. - -```bash -pip3 install reporting-server[postgres] -``` - -Then in your config, set the `db_url` accordingly, the url should be in the form - -``` -DB_TYPE://USERNAME:PASSWORD@HOST:PORT/DB_NAME?PARAM1=value&PARAM2=value -``` - -for example, to connect to postgres - -``` -postgres://:@/ -``` - -for more information, see https://tortoise-orm.readthedocs.io/en/latest/databases.html. - - -# Developers - -## Running tests - -### Running unit tests - -```bash -npm run test -``` - -### Collecting code coverage - -```bash -npm run test:cov -``` - -Generate coverage report -```bash -npm run test:report -``` - -## Live reload - -```bash -uvicorn --reload rest_server.app:get_app -``` - -## QA - -* I have a zombie process running either on port 8002 or 8003? - - The `reporting_server` runs two instances of the app on the same process. So, sometimes when you shut down one of the reporting-server instances, the other stay alive, resulting in a zombie process. You can kill it by running this command `kill -9 ` (on Linux based OS). That's why we recommend using `uvicorn --reload rest_server.app:get_app` for development purposes. diff --git a/packages/reporting-server/dependencies/__init__.py b/packages/reporting-server/dependencies/__init__.py deleted file mode 100644 index 09fb7aa3b..000000000 --- a/packages/reporting-server/dependencies/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .auth import auth_scheme, authenticator -from .logging import logger diff --git a/packages/reporting-server/dependencies/auth.py b/packages/reporting-server/dependencies/auth.py deleted file mode 100644 index 8729c606e..000000000 --- a/packages/reporting-server/dependencies/auth.py +++ /dev/null @@ -1,53 +0,0 @@ -from dependencies.logging import logger -from fastapi import Depends, HTTPException -from fastapi.security import OpenIdConnect -from rest_server.app_config import app_config -from rest_server.authenticator import AuthenticationError, JwtAuthenticator - -if app_config.jwt_public_key: - authenticator = JwtAuthenticator(app_config.jwt_public_key) - - if app_config.oidc_url: - oidc_url = app_config.oidc_url - else: - oidc_url = "" - - # TODO: Authorization code flow doesn't actually work because of this bug https://github.com/swagger-api/swagger-ui/issues/6741. - # althrough fastapi uses the latest version of swagger ui from a cdn, - # the oauth2-redirect is hardcoded using an old version. - # - # Also, password flow may not work because it is not actually part of the oidc standard. - # For keycloak, it doesn't return the id_token, which is required in a typical authorization code - # flow. - # - # On top of the above problems, swagger ui doesn't actually fully support oidc in the - # way we use it. We expect the id_token because it is the only token that MUST be a - # JWT according to oidc spec (although most implementation nowadays also uses JWT - # for the access token). Swagger UI passes the access_token to the server instead of the - # id_token, so in the case that the authentication provider is not using a JWT for the - # access_token, the authentication will fail. Even if the provider uses JWT for access_token, - # it may still fail because of the different claims present in the access_token and id_token. - # In the oidc spec, for an id_token, the "aud" claim MUST contain the client_id, but in - # the case of keycloak, even though the access_token is also a JWT, it does not have to - # follow the id_token spec, so the "aud" claim MAY NOT contain the client_id. - # This causes authentication to fail because in the JWT spec, if the "aud" claim is present, - # the verifier MUST check that it contains an expected value, since we expect an oidc - # id_token, we MUST verify that the "aud" contains the client_id. - security_scheme = OpenIdConnect(openIdConnectUrl=oidc_url) - - def auth_scheme(auth_header: str = Depends(security_scheme)): - parts = auth_header.split(" ") - if len(parts) != 2 or parts[0].lower() != "bearer": - raise HTTPException(401, "invalid bearer format") - try: - authenticator.verify_token(parts[1]) - except AuthenticationError as e: - raise HTTPException(401, str(e)) from e - - -else: - logger.warning("authentication is disabled") - authenticator = None - - def auth_scheme(): - return None # no authentication diff --git a/packages/reporting-server/dependencies/logging.py b/packages/reporting-server/dependencies/logging.py deleted file mode 100644 index 6419ce6ae..000000000 --- a/packages/reporting-server/dependencies/logging.py +++ /dev/null @@ -1,13 +0,0 @@ -import logging -import os -import sys - -from rest_server.app_config import app_config - -logger = logging.getLogger("app") -handler = logging.StreamHandler(sys.stdout) -handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT)) -logger.addHandler(handler) -logger.setLevel(app_config.log_level) -if "RMF_API_SERVER_LOG_LEVEL" in os.environ: - logger.setLevel(os.environ["RMF_API_SERVER_LOG_LEVEL"]) diff --git a/packages/reporting-server/models/pydantic_models.py b/packages/reporting-server/models/pydantic_models.py deleted file mode 100644 index 03642cb1e..000000000 --- a/packages/reporting-server/models/pydantic_models.py +++ /dev/null @@ -1,33 +0,0 @@ -from tortoise.contrib.pydantic import pydantic_model_creator - -from .tortoise_models import ( - AuthEvents, - Container, - DispenserState, - Door, - DoorState, - Fleet, - FleetState, - HealthStatus, - IngestorState, - Lift, - LiftState, - RawLog, - Robot, - TaskSummary, -) - -AuthEvents_Pydantic = pydantic_model_creator(AuthEvents, name="AuthEvents") -Container_Pydantic = pydantic_model_creator(Container, name="Container") -DispenserState_Pydantic = pydantic_model_creator(DispenserState, name="DispenserState") -Door_Pydantic = pydantic_model_creator(Door, name="Door") -DoorState_Pydantic = pydantic_model_creator(DoorState, name="DoorState") -Fleet_Pydantic = pydantic_model_creator(Fleet, name="Fleet") -FleetState_Pydantic = pydantic_model_creator(FleetState, name="FleetState") -HealthStatus_Pydantic = pydantic_model_creator(HealthStatus, name="HealthStatus") -IngestorState_Pydantic = pydantic_model_creator(IngestorState, name="IngestorState") -Lift_Pydantic = pydantic_model_creator(Lift, name="Lift") -LiftState_Pydantic = pydantic_model_creator(LiftState, name="LiftStates") -RawLog_Pydantic = pydantic_model_creator(RawLog, name="RawLog") -Robot_Pydantic = pydantic_model_creator(Robot, name="Robot") -TaskSummary_Pydantic = pydantic_model_creator(TaskSummary, name="TaskSummary") diff --git a/packages/reporting-server/models/tortoise_models/__init__.py b/packages/reporting-server/models/tortoise_models/__init__.py deleted file mode 100644 index 5e7749c73..000000000 --- a/packages/reporting-server/models/tortoise_models/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -from .auth_events import AuthEvents -from .container import Container -from .dispenser_state import DispenserState -from .door import Door -from .door_state import DoorState -from .fleet import Fleet, Robot -from .fleet_state import FleetState -from .health import Device, HealthStatus -from .ingestor_state import IngestorState -from .lift import Lift -from .lift_state import LiftState -from .raw_log import RawLog -from .task_summary import TaskSummary diff --git a/packages/reporting-server/models/tortoise_models/auth_events.py b/packages/reporting-server/models/tortoise_models/auth_events.py deleted file mode 100644 index c43be16d9..000000000 --- a/packages/reporting-server/models/tortoise_models/auth_events.py +++ /dev/null @@ -1,16 +0,0 @@ -from tortoise import fields, models - - -class AuthEvents(models.Model): - id = fields.IntField(pk=True) - # user = fields.ForeignKey(User, null=True) - username = fields.CharField(max_length=100, null=True) - user_keycloak_id = fields.CharField(max_length=100, null=True) - event_type = fields.CharField(max_length=100) - realm_id = fields.CharField(max_length=100, null=True) - client_id = fields.CharField(max_length=100, null=True) - ip_address = fields.CharField(max_length=50, null=True) - created = fields.DatetimeField(auto_now_add=True) - - def __str__(self): - return str(self.event_type) diff --git a/packages/reporting-server/models/tortoise_models/container.py b/packages/reporting-server/models/tortoise_models/container.py deleted file mode 100644 index 91395d764..000000000 --- a/packages/reporting-server/models/tortoise_models/container.py +++ /dev/null @@ -1,6 +0,0 @@ -from tortoise import fields, models - - -class Container(models.Model): - id = fields.IntField(pk=True) - name = fields.TextField() diff --git a/packages/reporting-server/models/tortoise_models/dispenser_state.py b/packages/reporting-server/models/tortoise_models/dispenser_state.py deleted file mode 100644 index e0434a172..000000000 --- a/packages/reporting-server/models/tortoise_models/dispenser_state.py +++ /dev/null @@ -1,28 +0,0 @@ -from enum import Enum - -from tortoise import fields, models - - -class DispenserStateEnum(str, Enum): - IDLE = "idle" - BUSY = "busy" - OFFLINE = "offline" - - -class DispenserStateService: - def get_state_name(self, state: int): - if state == 0: - return DispenserStateEnum.IDLE - elif state == 1: - return DispenserStateEnum.BUSY - elif state == 2: - return DispenserStateEnum.OFFLINE - - -class DispenserState(models.Model): - id = fields.IntField(pk=True) - state = fields.CharEnumField(DispenserStateEnum) - guid = fields.CharField(max_length=200) - created = fields.DatetimeField(auto_now_add=True) - - service = DispenserStateService() diff --git a/packages/reporting-server/models/tortoise_models/door.py b/packages/reporting-server/models/tortoise_models/door.py deleted file mode 100644 index 6485f07fe..000000000 --- a/packages/reporting-server/models/tortoise_models/door.py +++ /dev/null @@ -1,6 +0,0 @@ -from tortoise import fields, models - - -class Door(models.Model): - id = fields.IntField(pk=True) - name = fields.CharField(max_length=100) diff --git a/packages/reporting-server/models/tortoise_models/door_state.py b/packages/reporting-server/models/tortoise_models/door_state.py deleted file mode 100644 index 9d9fbd493..000000000 --- a/packages/reporting-server/models/tortoise_models/door_state.py +++ /dev/null @@ -1,38 +0,0 @@ -from enum import Enum - -from tortoise import fields, models - - -class DoorStateEnum(str, Enum): - CLOSED = "closed" - MOVING = "moving" - OPEN = "open" - OFFLINE = "offline" - UNKNOWN = "unknown" - - -class DoorStateService: - def get_state_name(self, door_state: int): - if door_state == 0: - return DoorStateEnum.CLOSED - elif door_state == 1: - return DoorStateEnum.MOVING - elif door_state == 2: - return DoorStateEnum.OPEN - elif door_state == 3: - return DoorStateEnum.OFFLINE - elif door_state == 4: - return DoorStateEnum.UNKNOWN - else: - return DoorStateEnum.UNKNOWN - - -class DoorState(models.Model): - id = fields.IntField(pk=True) - state: DoorStateEnum = fields.CharEnumField( - DoorStateEnum, default=DoorStateEnum.UNKNOWN - ) - door = fields.ForeignKeyField("models.Door", related_name="door_states", null=True) - created = fields.DatetimeField(auto_now_add=True) - - service = DoorStateService() diff --git a/packages/reporting-server/models/tortoise_models/fleet.py b/packages/reporting-server/models/tortoise_models/fleet.py deleted file mode 100644 index 679d045e5..000000000 --- a/packages/reporting-server/models/tortoise_models/fleet.py +++ /dev/null @@ -1,10 +0,0 @@ -from tortoise import fields, models - - -class Robot(models.Model): - name = fields.CharField(max_length=100) - model = fields.CharField(max_length=100, null=True) - - -class Fleet(models.Model): - name = fields.CharField(max_length=100) diff --git a/packages/reporting-server/models/tortoise_models/fleet_state.py b/packages/reporting-server/models/tortoise_models/fleet_state.py deleted file mode 100644 index 2e13c31fb..000000000 --- a/packages/reporting-server/models/tortoise_models/fleet_state.py +++ /dev/null @@ -1,57 +0,0 @@ -from enum import Enum - -from tortoise import fields, models - - -class RobotStateEnum(str, Enum): - MODE_IDLE = "closed" - MODE_CHARGING = "charging" - MODE_MOVING = "moving" - MODE_PAUSED = "paused" - MODE_WAITING = "waiting" - MODE_EMERGENCY = "emergency" - MODE_GOING_HOME = "going_home" - MODE_DOCKING = "docking" - MODE_ADAPTER_ERROR = "adapter_error" - - -class RobotStateService: - def get_robot_state_name(self, state: int): - if state == 0: - return RobotStateEnum.MODE_IDLE - elif state == 1: - return RobotStateEnum.MODE_CHARGING - elif state == 2: - return RobotStateEnum.MODE_MOVING - elif state == 3: - return RobotStateEnum.MODE_PAUSED - elif state == 4: - return RobotStateEnum.MODE_WAITING - elif state == 5: - return RobotStateEnum.MODE_EMERGENCY - elif state == 6: - return RobotStateEnum.MODE_GOING_HOME - elif state == 7: - return RobotStateEnum.MODE_DOCKING - elif state == 8: - return RobotStateEnum.MODE_ADAPTER_ERROR - - -class FleetState(models.Model): - id = fields.IntField(pk=True) - created = fields.DatetimeField(auto_now_add=True) - fleet = fields.ForeignKeyField( - "models.Fleet", related_name="fleet_states", null=True - ) - robot = fields.ForeignKeyField( - "models.Robot", related_name="fleet_states", null=True - ) - robot_battery_percent = fields.CharField(max_length=200) - robot_location = fields.CharField(max_length=200) - robot_mode: RobotStateEnum = fields.CharEnumField( - RobotStateEnum, default=RobotStateEnum.MODE_IDLE - ) - robot_seq = fields.IntField() - robot_task_id = fields.CharField(max_length=200) - - service = RobotStateService() diff --git a/packages/reporting-server/models/tortoise_models/health.py b/packages/reporting-server/models/tortoise_models/health.py deleted file mode 100644 index 799c957f9..000000000 --- a/packages/reporting-server/models/tortoise_models/health.py +++ /dev/null @@ -1,36 +0,0 @@ -from enum import Enum - -from tortoise import fields, models - - -class HealthStatusEmun(str, Enum): - HEALTHY = "Healthy" - UNHEALTHY = "Unhealthy" - DEAD = "Dead" - - -class Device(models.Model): - id = fields.IntField(pk=True) - type = fields.TextField() - actor = fields.CharField(max_length=25, null=True) - - -class HealthStatusService: - def get_health_status(self, status: str): - if status == "HealthStatus.HEALTHY": - return HealthStatusEmun.HEALTHY - elif status == "HealthStatus.UNHEALTHY": - return HealthStatusEmun.UNHEALTHY - elif status == "HealthStatus.DEAD": - return HealthStatusEmun.DEAD - - -class HealthStatus(models.Model): - device = fields.ForeignKeyField( - "models.Device", related_name="health_status", null=True - ) - health_status = fields.CharField(max_length=25, null=True) - health_message = fields.TextField(null=True) - created = fields.DatetimeField(auto_now_add=True) - - service = HealthStatusService() diff --git a/packages/reporting-server/models/tortoise_models/ingestor_state.py b/packages/reporting-server/models/tortoise_models/ingestor_state.py deleted file mode 100644 index cb9036185..000000000 --- a/packages/reporting-server/models/tortoise_models/ingestor_state.py +++ /dev/null @@ -1,30 +0,0 @@ -from enum import Enum - -from tortoise import fields, models - - -class IngestorStateEnum(str, Enum): - IDLE = "idle" - BUSY = "busy" - OFFLINE = "offline" - - -class IngestorStateService: - def get_state_name(self, state: int): - if state == 0: - return IngestorStateEnum.IDLE - elif state == 1: - return IngestorStateEnum.BUSY - elif state == 2: - return IngestorStateEnum.OFFLINE - - -class IngestorState(models.Model): - id = fields.IntField(pk=True) - state: IngestorStateEnum = fields.CharEnumField( - IngestorStateEnum, default=IngestorStateEnum.OFFLINE - ) - guid = fields.CharField(max_length=200) - created = fields.DatetimeField(auto_now_add=True) - - service = IngestorStateService() diff --git a/packages/reporting-server/models/tortoise_models/lift.py b/packages/reporting-server/models/tortoise_models/lift.py deleted file mode 100644 index c08dab43f..000000000 --- a/packages/reporting-server/models/tortoise_models/lift.py +++ /dev/null @@ -1,6 +0,0 @@ -from tortoise import fields, models - - -class Lift(models.Model): - id = fields.IntField(pk=True) - name = fields.CharField(max_length=100) diff --git a/packages/reporting-server/models/tortoise_models/lift_state.py b/packages/reporting-server/models/tortoise_models/lift_state.py deleted file mode 100644 index 0f0158df2..000000000 --- a/packages/reporting-server/models/tortoise_models/lift_state.py +++ /dev/null @@ -1,82 +0,0 @@ -from enum import Enum - -from tortoise import fields, models - - -class LiftStateEnum(str, Enum): - MODE_AGV = "avg" - MODE_EMERGENCY = "emergency" - MODE_FIRE = "fire" - MODE_HUMAN = "human" - MODE_OFFLINE = "offline" - MODE_UNKNOWN = "unknown" - - -# FIXME: add all lift states -class LiftMotionStateEnum(str, Enum): - MOTION_DOWN = "down" - MOTION_STOPPED = "stopped" - MOTION_UNKNOWN = "unknown" - MOTION_UP = "up" - - -class LiftDoorStateEmun(str, Enum): - DOOR_CLOSED = "closed" - DOOR_MOVING = "moving" - DOOR_OPEN = "open" - - -class LiftStateService: - def get_state_name(self, state: int): - if state == 0: - return LiftStateEnum.MODE_UNKNOWN - elif state == 1: - return LiftStateEnum.MODE_HUMAN - elif state == 2: - return LiftStateEnum.MODE_AGV - elif state == 3: - return LiftStateEnum.MODE_FIRE - elif state == 4: - return LiftStateEnum.MODE_OFFLINE - elif state == 5: - return LiftStateEnum.MODE_EMERGENCY - - def get_motion_state_name(self, state: int): - if state == 0: - return LiftMotionStateEnum.MOTION_STOPPED - elif state == 1: - return LiftMotionStateEnum.MOTION_UP - elif state == 2: - return LiftMotionStateEnum.MOTION_DOWN - elif state == 3: - return LiftMotionStateEnum.MOTION_UNKNOWN - - def get_door_state_name(self, state: int): - if state == 0: - return LiftDoorStateEmun.DOOR_CLOSED - elif state == 1: - return LiftDoorStateEmun.DOOR_MOVING - elif state == 2: - return LiftDoorStateEmun.DOOR_OPEN - - -class LiftState(models.Model): - id = fields.IntField(pk=True) - lift = fields.ForeignKeyField( - "models.Lift", related_name="lift_states", on_delete="CASCADE" - ) - door_state: LiftDoorStateEmun = fields.CharEnumField( - LiftDoorStateEmun, default=LiftDoorStateEmun.DOOR_CLOSED - ) - state: LiftStateEnum = fields.CharEnumField( - LiftStateEnum, default=LiftStateEnum.MODE_UNKNOWN - ) - destination_floor = fields.CharField(max_length=20) - motion_state: LiftMotionStateEnum = fields.CharEnumField( - LiftMotionStateEnum, default=LiftMotionStateEnum.MOTION_STOPPED - ) - current_floor = fields.CharField(max_length=20) - session_id = fields.CharField(max_length=200) - created = fields.DatetimeField(auto_now_add=True) - - service = LiftStateService() diff --git a/packages/reporting-server/models/tortoise_models/raw_log.py b/packages/reporting-server/models/tortoise_models/raw_log.py deleted file mode 100644 index cbb5aed06..000000000 --- a/packages/reporting-server/models/tortoise_models/raw_log.py +++ /dev/null @@ -1,25 +0,0 @@ -from enum import Enum - -from tortoise import fields, models - - -class LogLevel(str, Enum): - CRITICAL = "critical" - ERROR = "error" - WARN = "warn" - INFO = "info" - DEBUG = "debug" - UNKNOWN = "unknown" - - -class RawLog(models.Model): - id = fields.IntField(pk=True) - level: LogLevel = fields.CharEnumField(LogLevel, default=LogLevel.INFO) - message = fields.TextField() - created = fields.DatetimeField(auto_now_add=True) - container = fields.ForeignKeyField( - "models.Container", related_name="containers", null=True - ) - - def __str__(self): - return str(self.message) diff --git a/packages/reporting-server/models/tortoise_models/task_summary.py b/packages/reporting-server/models/tortoise_models/task_summary.py deleted file mode 100644 index dc41c198b..000000000 --- a/packages/reporting-server/models/tortoise_models/task_summary.py +++ /dev/null @@ -1,128 +0,0 @@ -from enum import Enum - -from tortoise import fields, models -from tortoise.contrib.pydantic import pydantic_model_creator - - -class TaskStateEnum(str, Enum): - STATE_ACTIVE = "active" - STATE_CANCELLED = "cancelled" - STATE_COMPLETED = "completed" - STATE_FAILED = "failed" - STATE_PENDING = "pending" - STATE_QUEUED = "queued" - - -class TaskTypeEnum(str, Enum): - CLEAN = "clean" - LOOP = "loop" - DELIVERY = "delivery" - - -class TaskSummaryService: - def get_task_state_name(self, state: int): - if state == 0: - return TaskStateEnum.STATE_ACTIVE - elif state == 1: - return TaskStateEnum.STATE_CANCELLED - elif state == 2: - return TaskStateEnum.STATE_COMPLETED - elif state == 3: - return TaskStateEnum.STATE_FAILED - elif state == 4: - return TaskStateEnum.STATE_PENDING - elif state == 5: - return TaskStateEnum.STATE_QUEUED - - def get_task_type_name(self, type: int): - if type == 0: - return TaskTypeEnum.CLEAN - elif type == 1: - return TaskTypeEnum.LOOP - elif type == 2: - return TaskTypeEnum.DELIVERY - - -class Time: - sec = fields.IntField(pk=True) - nanosec = fields.IntField(pk=True) - - -class Priority: - value = fields.IntField(pk=True) - - -class TaskType: - type = TaskTypeEnum = fields.CharEnumField(TaskTypeEnum) - - -class Station: - task_id = fields.CharField(max_length=50) - robot_type = fields.CharField(max_length=50) - place_name = fields.CharField(max_length=50) - - -class Loop: - task_id = fields.CharField(max_length=50) - robot_type = fields.CharField(max_length=50) - num_loops = fields.IntField(max_length=50) - start_name = fields.CharField(max_length=50) - finish_name = fields.CharField(max_length=50) - - -class Behavior: - name = fields.CharField(max_length=50) - parameters = [] - - -class Delivery: - task_id = fields.CharField(max_length=50) - items = [] - pickup_place_name = fields.CharField(max_length=50) - pickup_dispenser = fields.CharField(max_length=50) - pickup_behavior: Behavior = fields.JSONField() - dropoff_place_name = fields.CharField(max_length=50) - dropoff_ingestor = fields.CharField(max_length=50) - dropoff_behavior: Behavior = fields.JSONField() - - -class Clean: - start_waypoint = fields.CharField(max_length=50) - - -class Description: - start_time: Time = fields.JSONField() - priority: Priority = fields.JSONField() - task_type: TaskType = fields.JSONField() - station: Station = fields.JSONField() - loop: Loop = fields.JSONField() - delivery: Delivery = fields.JSONField() - clean: Clean = fields.JSONField() - - -class TaskProfile: - task_id = fields.CharField(max_length=50) - submission_time: Time = fields.JSONField() - description: Description = fields.JSONField() - - -class TaskSummary(models.Model): - id = fields.IntField(pk=True) - created = fields.DatetimeField(auto_now_add=True) - fleet = fields.ForeignKeyField( - "models.Fleet", related_name="task_summary", null=True - ) - robot = fields.ForeignKeyField( - "models.Robot", related_name="task_summary", null=True - ) - task_id = fields.CharField(max_length=50) - task_profile: TaskProfile = fields.JSONField() - state: TaskStateEnum = fields.CharEnumField( - TaskStateEnum, default=TaskStateEnum.STATE_PENDING - ) - status = fields.CharField(max_length=50, null=True) - submission_time: Time = fields.JSONField() - start_time: Time = fields.JSONField() - end_time: Time = fields.JSONField() - - service = TaskSummaryService() diff --git a/packages/reporting-server/models/tortoise_models/user.py b/packages/reporting-server/models/tortoise_models/user.py deleted file mode 100644 index 5c3307fd8..000000000 --- a/packages/reporting-server/models/tortoise_models/user.py +++ /dev/null @@ -1,11 +0,0 @@ -from tortoise import fields, models -from tortoise.contrib.pydantic import pydantic_model_creator - - -class User(models.Model): - id = fields.IntField(pk=True) - username = fields.TextField(null=True) - user_id = fields.TextField(null=True) - - def __str__(self): - return str(self.username) diff --git a/packages/reporting-server/package.json b/packages/reporting-server/package.json deleted file mode 100644 index d2cc1dce9..000000000 --- a/packages/reporting-server/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "reporting-server", - "version": "0.0.1", - "description": "dummy package", - "private": true, - "scripts": { - "prepack": "pipenv run python setup.py bdist_wheel", - "start": "pipenv run python -m reporting_server", - "test": "python3 -m pipenv run python -m unittest", - "test:cov": "RMF_API_SERVER_LOG_LEVEL=CRITICAL RMF_API_SERVER_TEST_COVERAGE=1 pipenv run python -m coverage run -p -m unittest && pipenv run python -m coverage combine", - "test:report": "pipenv run python -m coverage html && xdg-open htmlcov/index.html", - "lint": "python3 -m pipenv run pylint rest_server" - }, - "devDependencies": { - "pipenv-install": "file:../../pipenv-install" - } -} diff --git a/packages/reporting-server/parsers/__init__.py b/packages/reporting-server/parsers/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/reporting-server/parsers/auth_event_parser.py b/packages/reporting-server/parsers/auth_event_parser.py deleted file mode 100644 index bd147a624..000000000 --- a/packages/reporting-server/parsers/auth_event_parser.py +++ /dev/null @@ -1,16 +0,0 @@ -import json - - -async def auth_event_parser(fullstring: str): - splitted_string = fullstring.split("JSON_EVENT::") - modified_string = splitted_string[1] - state_json = json.loads(modified_string) - - return { - "username": state_json.get("username", None), - "user_keycloak_id": state_json.get("userId", None), - "event_type": state_json["type"], - "realm_id": state_json.get("realmId", None), - "client_id": state_json.get("clientId", None), - "ip_address": state_json["ipAddress"], - } diff --git a/packages/reporting-server/parsers/dispenser_state_parser.py b/packages/reporting-server/parsers/dispenser_state_parser.py deleted file mode 100644 index bc88537bd..000000000 --- a/packages/reporting-server/parsers/dispenser_state_parser.py +++ /dev/null @@ -1,13 +0,0 @@ -import json - -from models.tortoise_models.dispenser_state import DispenserState - - -async def dispenser_state_parser(fullstring: str): - modified_string = fullstring.replace("dispenser_state:", "") - state_json = json.loads(modified_string) - - return { - "state": DispenserState.service.get_state_name(state_json["mode"]), - "guid": state_json["guid"], - } diff --git a/packages/reporting-server/parsers/doors_state_parser.py b/packages/reporting-server/parsers/doors_state_parser.py deleted file mode 100644 index d1d81a241..000000000 --- a/packages/reporting-server/parsers/doors_state_parser.py +++ /dev/null @@ -1,15 +0,0 @@ -import json - -from models.tortoise_models.door_state import DoorState - - -async def doors_state_parser(fullstring: str): - modified_string = fullstring.replace("door_state:", "") - door_state_json = json.loads(modified_string) - - return { - "state": DoorState.service.get_state_name( - door_state_json["current_mode"]["value"] - ), - "name": door_state_json["door_name"], - } diff --git a/packages/reporting-server/parsers/fleet_state_parser.py b/packages/reporting-server/parsers/fleet_state_parser.py deleted file mode 100644 index 5b2d6d4cc..000000000 --- a/packages/reporting-server/parsers/fleet_state_parser.py +++ /dev/null @@ -1,31 +0,0 @@ -import json - -from models.tortoise_models import FleetState - - -async def fleet_state_parser(fullstring: str) -> list: - modified_string = fullstring.replace("fleet_state:", "") - state_json = json.loads(modified_string) - - if not isinstance(state_json["robots"], list) or len(state_json["robots"]) == 0: - print("robots should be a list") - return [] - - fleet_list = [] - for robot in state_json["robots"]: - fleet_list.append( - { - "fleet_name": state_json["name"], - "robot_battery_percent": robot["battery_percent"], - "robot_location": robot["location"], - "robot_mode": FleetState.service.get_robot_state_name( - robot["mode"]["mode"] - ), - "robot_model": robot["model"], - "robot_name": robot["name"], - "robot_seq": robot["seq"], - "robot_task_id": robot["task_id"], - } - ) - - return fleet_list diff --git a/packages/reporting-server/parsers/health_parser.py b/packages/reporting-server/parsers/health_parser.py deleted file mode 100644 index e5690dd21..000000000 --- a/packages/reporting-server/parsers/health_parser.py +++ /dev/null @@ -1,17 +0,0 @@ -import json - -from models.tortoise_models.health import HealthStatus - - -async def health_status_parser(fullstring: str, health_device: str): - modified_string = fullstring.replace(health_device + ":", "") - state_json = json.loads(modified_string) - - return { - "device": health_device, - "actor_id": state_json["id"], - "health_status": HealthStatus.service.get_health_status( - state_json["health_status"] - ), - "health_message": state_json["health_message"], - } diff --git a/packages/reporting-server/parsers/ingestor_state_parser.py b/packages/reporting-server/parsers/ingestor_state_parser.py deleted file mode 100644 index 5b1e096b1..000000000 --- a/packages/reporting-server/parsers/ingestor_state_parser.py +++ /dev/null @@ -1,13 +0,0 @@ -import json - -from models.tortoise_models.ingestor_state import IngestorState - - -async def ingestor_state_parser(fullstring: str): - modified_string = fullstring.replace("ingestor_state:", "") - state_json = json.loads(modified_string) - - return { - "state": IngestorState.service.get_state_name(state_json["mode"]), - "guid": state_json["guid"], - } diff --git a/packages/reporting-server/parsers/lift_state_parser.py b/packages/reporting-server/parsers/lift_state_parser.py deleted file mode 100644 index 3e50ee798..000000000 --- a/packages/reporting-server/parsers/lift_state_parser.py +++ /dev/null @@ -1,37 +0,0 @@ -import json - -from models.tortoise_models.lift_state import LiftState - - -async def lift_state_parser(fullstring: str): - modified_string = fullstring.replace("lift_state:", "") - state_json = json.loads(modified_string) - - # In case it is wrapped in a dict - motion_state = LiftState.service.get_motion_state_name( - state_json["motion_state"]["value"] - if isinstance(state_json["motion_state"], dict) - else state_json["motion_state"] - ) - - door_state = LiftState.service.get_door_state_name( - state_json["door_state"]["value"] - if isinstance(state_json["door_state"], dict) - else state_json["door_state"] - ) - - state = LiftState.service.get_state_name( - state_json["current_mode"]["value"] - if isinstance(state_json["current_mode"], dict) - else state_json["current_mode"] - ) - - return { - "name": state_json["lift_name"], - "state": state, - "motion_state": motion_state, - "door_state": door_state, - "session_id": state_json["session_id"], - "destination_floor": state_json["destination_floor"], - "current_floor": state_json["current_floor"], - } diff --git a/packages/reporting-server/parsers/log_type_parser.py b/packages/reporting-server/parsers/log_type_parser.py deleted file mode 100644 index 39a5b366e..000000000 --- a/packages/reporting-server/parsers/log_type_parser.py +++ /dev/null @@ -1,19 +0,0 @@ -from models.tortoise_models.raw_log import LogLevel - - -def get_log_type(fullstring, stream_type="stdout"): - - if "critical" in fullstring.lower(): - return LogLevel.CRITICAL - elif "error" in fullstring.lower(): - return LogLevel.ERROR - elif "warn" in fullstring.lower(): - return LogLevel.WARN - elif "info" in fullstring.lower(): - return LogLevel.INFO - elif "debug" in fullstring.lower(): - return LogLevel.DEBUG - else: - if stream_type == "stderr": - return LogLevel.ERROR - return LogLevel.DEBUG diff --git a/packages/reporting-server/parsers/task_summary_parser.py b/packages/reporting-server/parsers/task_summary_parser.py deleted file mode 100644 index 1b5aa8ff2..000000000 --- a/packages/reporting-server/parsers/task_summary_parser.py +++ /dev/null @@ -1,27 +0,0 @@ -import json - -from models.tortoise_models.task_summary import TaskSummary - - -async def task_summary_parser(fullstring: str): - modified_string = fullstring.replace("task_summary:", "") - state_json = json.loads(modified_string) - - if len(state_json) > 0: - if len(state_json["status"]) <= 0: - status = None - else: - status = state_json["status"] - return { - "fleet_name": state_json["fleet_name"], - "task_id": state_json["task_id"], - "task_profile": state_json["task_profile"], - "state": TaskSummary.service.get_task_state_name(state_json["state"]), - "status": status, - "submission_time": state_json["submission_time"], - "start_time": state_json["start_time"], - "end_time": state_json["end_time"], - "robot_name": state_json["robot_name"], - } - else: - return {} diff --git a/packages/reporting-server/parsers/test_auth_event_parser.py b/packages/reporting-server/parsers/test_auth_event_parser.py deleted file mode 100644 index 1a6e31d63..000000000 --- a/packages/reporting-server/parsers/test_auth_event_parser.py +++ /dev/null @@ -1,21 +0,0 @@ -import unittest - -from rest_server.__mocks__ import raw_data - -from .auth_event_parser import auth_event_parser - - -class TestCaseAuthEvent(unittest.IsolatedAsyncioTestCase): - def setUp(self): - self.data = raw_data.mock_keycloak_login_error["log"] - - async def test_parse_and_get_values(self): - parsed_values = await auth_event_parser(self.data) - self.assertEqual(parsed_values["username"], "test") - self.assertEqual(parsed_values["user_keycloak_id"], None) - self.assertEqual(parsed_values["event_type"], "LOGIN_ERROR") - self.assertEqual( - parsed_values["realm_id"], "579ce396-83c7-4094-964d-7ea07553089f" - ) - self.assertEqual(parsed_values["client_id"], "reporting") - self.assertEqual(parsed_values["ip_address"], "192.168.49.1") diff --git a/packages/reporting-server/parsers/test_dispenser_state_parser.py b/packages/reporting-server/parsers/test_dispenser_state_parser.py deleted file mode 100644 index 9d196224a..000000000 --- a/packages/reporting-server/parsers/test_dispenser_state_parser.py +++ /dev/null @@ -1,20 +0,0 @@ -import unittest - -from models.tortoise_models.dispenser_state import DispenserState -from rest_server.__mocks__.parsed_data import mock_dispenser_state - -from .dispenser_state_parser import dispenser_state_parser - - -class TestCaseDispenserState(unittest.IsolatedAsyncioTestCase): - def setUp(self): - - self.data = mock_dispenser_state - - async def test_parse_and_get_values(self): - parsed_values = await dispenser_state_parser(self.data) - self.assertEqual( - parsed_values["state"], DispenserState.service.get_state_name(0) - ) - - self.assertEqual(parsed_values["guid"], "coke_dispenser") diff --git a/packages/reporting-server/parsers/test_doors_state_parser.py b/packages/reporting-server/parsers/test_doors_state_parser.py deleted file mode 100644 index 2a52742f1..000000000 --- a/packages/reporting-server/parsers/test_doors_state_parser.py +++ /dev/null @@ -1,16 +0,0 @@ -import unittest - -from models.tortoise_models.door_state import DoorState -from rest_server.__mocks__.parsed_data import mock_door_state - -from .doors_state_parser import doors_state_parser - - -class TestCaseDoorsState(unittest.IsolatedAsyncioTestCase): - def setUp(self): - self.data = mock_door_state - - async def test_parse_and_get_values(self): - parsed_values = await doors_state_parser(self.data) - self.assertEqual(parsed_values["state"], DoorState.service.get_state_name(0)) - self.assertEqual(parsed_values["name"], "hardware_door") diff --git a/packages/reporting-server/parsers/test_fleet_state_parser.py b/packages/reporting-server/parsers/test_fleet_state_parser.py deleted file mode 100644 index f600335a4..000000000 --- a/packages/reporting-server/parsers/test_fleet_state_parser.py +++ /dev/null @@ -1,44 +0,0 @@ -import unittest - -from models.tortoise_models.fleet_state import FleetState -from rest_server.__mocks__.parsed_data import mock_fleet_state - -from .fleet_state_parser import fleet_state_parser - - -class TestCaseFleetState(unittest.IsolatedAsyncioTestCase): - def setUp(self): - self.data = mock_fleet_state - - async def test_parse_and_get_values(self): - parsed_values = await fleet_state_parser(self.data) - - self.assertEqual(len(parsed_values), 2) - first_robot = parsed_values[0] - second_robot = parsed_values[1] - - self.assertEqual(first_robot["fleet_name"], "tinyRobot") - self.assertEqual(first_robot["robot_name"], "tinyRobot1") - self.assertEqual(first_robot["robot_model"], "") - self.assertEqual(first_robot["robot_task_id"], "") - self.assertEqual(first_robot["robot_battery_percent"], 100.0) - self.assertEqual(first_robot["robot_seq"], 3190) - self.assertEqual( - first_robot["robot_mode"], FleetState.service.get_robot_state_name(1) - ) - - self.assertEqual(second_robot["fleet_name"], "tinyRobot") - self.assertEqual(second_robot["robot_name"], "tinyRobot2") - self.assertEqual(second_robot["robot_model"], "") - self.assertEqual(second_robot["robot_task_id"], "") - self.assertEqual(second_robot["robot_battery_percent"], 100.0) - self.assertEqual(second_robot["robot_seq"], 3191) - self.assertEqual( - second_robot["robot_mode"], FleetState.service.get_robot_state_name(1) - ) - - async def test_return_empty_list_if_no_robot(self): - parsed_values = await fleet_state_parser( - 'fleet_state:{"name": "tinyRobot", "robots":[]}' - ) - self.assertEqual(parsed_values, []) diff --git a/packages/reporting-server/parsers/test_health_parser.py b/packages/reporting-server/parsers/test_health_parser.py deleted file mode 100644 index db6b72535..000000000 --- a/packages/reporting-server/parsers/test_health_parser.py +++ /dev/null @@ -1,17 +0,0 @@ -import unittest - -from models.tortoise_models.health import HealthStatusEmun - -from .health_parser import health_status_parser - - -class TestCaseHealth(unittest.IsolatedAsyncioTestCase): - def setUp(self): - self.data = 'door_health:{"id": "hardware_door", "health_status": "HealthStatus.HEALTHY", "health_message": null}\n' - - async def test_parse_and_get_values(self): - parsed_values = await health_status_parser(self.data, "door_health") - self.assertEqual(parsed_values["device"], "door_health") - self.assertEqual(parsed_values["actor_id"], "hardware_door") - self.assertEqual(parsed_values["health_status"], HealthStatusEmun.HEALTHY) - self.assertEqual(parsed_values["health_message"], None) diff --git a/packages/reporting-server/parsers/test_ingestor_parser.py b/packages/reporting-server/parsers/test_ingestor_parser.py deleted file mode 100644 index 5d0126903..000000000 --- a/packages/reporting-server/parsers/test_ingestor_parser.py +++ /dev/null @@ -1,18 +0,0 @@ -import unittest - -from models.tortoise_models.ingestor_state import IngestorState -from rest_server.__mocks__.parsed_data import mock_ingestor_state - -from .ingestor_state_parser import ingestor_state_parser - - -class TestCaseIngestorState(unittest.IsolatedAsyncioTestCase): - def setUp(self): - self.data = mock_ingestor_state - - async def test_parse_and_get_values(self): - parsed_values = await ingestor_state_parser(self.data) - self.assertEqual(parsed_values["guid"], "coke_ingestor") - self.assertEqual( - parsed_values["state"], IngestorState.service.get_state_name(0) - ) diff --git a/packages/reporting-server/parsers/test_lift_state_parser.py b/packages/reporting-server/parsers/test_lift_state_parser.py deleted file mode 100644 index e5dc6ec9a..000000000 --- a/packages/reporting-server/parsers/test_lift_state_parser.py +++ /dev/null @@ -1,38 +0,0 @@ -import unittest - -from models.tortoise_models.lift_state import LiftState -from rest_server.__mocks__.parsed_data import mock_lift_state - -from .lift_state_parser import lift_state_parser - - -class TestCaseLiftState(unittest.IsolatedAsyncioTestCase): - def setUp(self): - self.data = mock_lift_state - self.data_with_dict_states = 'lift_state: {"lift_name": "test_lift", "lift_time": 0, "available_floors": ["L1", "L2"], "current_floor": "L1", "destination_floor": "L2", "door_state": {"value": 0}, "motion_state": {"value": 0}, "available_modes": [0], "current_mode": {"value": 0}, "session_id": "test_session"}\n' - - async def test_parse_and_get_values(self): - parsed_values = await lift_state_parser(self.data) - self.assertEqual(parsed_values["state"], LiftState.service.get_state_name(0)) - self.assertEqual( - parsed_values["motion_state"], LiftState.service.get_motion_state_name(0) - ) - self.assertEqual( - parsed_values["door_state"], LiftState.service.get_door_state_name(0) - ) - - self.assertEqual(parsed_values["current_floor"], "L1") - self.assertEqual(parsed_values["destination_floor"], "L2") - self.assertEqual(parsed_values["session_id"], "test_session") - - self.assertEqual(parsed_values["state"], LiftState.service.get_state_name(0)) - - async def test_parse_and_get_values_with_dict_states(self): - parsed_values = await lift_state_parser(self.data_with_dict_states) - self.assertEqual(parsed_values["state"], LiftState.service.get_state_name(0)) - self.assertEqual( - parsed_values["motion_state"], LiftState.service.get_motion_state_name(0) - ) - self.assertEqual( - parsed_values["door_state"], LiftState.service.get_door_state_name(0) - ) diff --git a/packages/reporting-server/parsers/test_log_type_parser.py b/packages/reporting-server/parsers/test_log_type_parser.py deleted file mode 100644 index 21ca3fdb2..000000000 --- a/packages/reporting-server/parsers/test_log_type_parser.py +++ /dev/null @@ -1,37 +0,0 @@ -import unittest - -from models.tortoise_models.raw_log import LogLevel - -from .log_type_parser import get_log_type - - -class TestCaseLogTypeParserCase(unittest.TestCase): - def setUp(self): - pass - - def test_warning_messages(self): - self.assertEqual(get_log_type("this is a Warn", "stdout"), LogLevel.WARN) - self.assertEqual(get_log_type("WARN:", "stdout"), LogLevel.WARN) - self.assertEqual(get_log_type("WARNING:", "stdout"), LogLevel.WARN) - self.assertEqual(get_log_type("warn", "stdout"), LogLevel.WARN) - - def test_error_messages(self): - self.assertEqual(get_log_type("this is an Error", "stdout"), LogLevel.ERROR) - self.assertEqual(get_log_type("ERROR:", "stdout"), LogLevel.ERROR) - self.assertEqual(get_log_type("error", "stdout"), LogLevel.ERROR) - self.assertEqual( - get_log_type("normal test with problems", "stderr"), LogLevel.ERROR - ) - - def test_debug_messages(self): - self.assertEqual(get_log_type("this is a Debug msg", "stdout"), LogLevel.DEBUG) - self.assertEqual(get_log_type("DEBUG:", "stdout"), LogLevel.DEBUG) - self.assertEqual(get_log_type("debug", "stdout"), LogLevel.DEBUG) - self.assertEqual( - get_log_type("This is a random text", "stdout"), LogLevel.DEBUG - ) - - def test_info_messages(self): - self.assertEqual(get_log_type("this is an Info msg", "stdout"), LogLevel.INFO) - self.assertEqual(get_log_type("INFO:", "stdout"), LogLevel.INFO) - self.assertEqual(get_log_type("info", "stdout"), LogLevel.INFO) diff --git a/packages/reporting-server/parsers/test_task_summary_parser.py b/packages/reporting-server/parsers/test_task_summary_parser.py deleted file mode 100644 index fae6a945d..000000000 --- a/packages/reporting-server/parsers/test_task_summary_parser.py +++ /dev/null @@ -1,40 +0,0 @@ -import unittest - -from models.tortoise_models.task_summary import TaskSummary -from rest_server.__mocks__.parsed_data import mock_task_summary - -from .task_summary_parser import task_summary_parser - - -class TestCaseTaskSummary(unittest.IsolatedAsyncioTestCase): - def setUp(self): - self.data = mock_task_summary - - async def test_parse_and_get_values(self): - parsed_values = await task_summary_parser(self.data) - - self.assertEqual(parsed_values["task_id"], "Loop0") - self.assertEqual(parsed_values["fleet_name"], "tinyRobot") - self.assertEqual( - parsed_values["state"], TaskSummary.service.get_task_state_name(0) - ) - self.assertEqual(parsed_values["status"], None) - self.assertEqual( - parsed_values["task_profile"]["submission_time"], - {"sec": 131, "nanosec": 553000000}, - ) - self.assertEqual(parsed_values["submission_time"], {"sec": 0, "nanosec": 0}) - self.assertEqual( - parsed_values["start_time"], {"sec": 1623383362, "nanosec": 348338289} - ) - self.assertEqual( - parsed_values["end_time"], {"sec": 1623383449, "nanosec": 79154833} - ) - self.assertEqual(parsed_values["robot_name"], "tinyRobot2") - self.assertEqual( - parsed_values["task_profile"]["description"]["task_type"]["type"], 1 - ) - - async def test_return_empty_list_if_no_task(self): - parsed_values = await task_summary_parser("task_summary:{}") - self.assertEqual(parsed_values, {}) diff --git a/packages/reporting-server/rest_server/__init__.py b/packages/reporting-server/rest_server/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/reporting-server/rest_server/__main__.py b/packages/reporting-server/rest_server/__main__.py deleted file mode 100644 index 1d4896963..000000000 --- a/packages/reporting-server/rest_server/__main__.py +++ /dev/null @@ -1,47 +0,0 @@ -import asyncio - -from uvicorn import Config, Server - -from .app import get_app -from .app_config import SystemMode, app_config - - -class CustomUvicornServer(Server): - def run(self, sockets=None): - self.config.setup_event_loop() - return self.serve(sockets=sockets) - - -async def run(): - apps = [] - config1 = Config( - get_app(SystemMode.FLUENTD), - host=app_config.host, - port=app_config.port_fluentd, - root_path=app_config.public_url.path, - log_level=app_config.log_level.lower(), - ) - config2 = Config( - get_app(SystemMode.REPORT), - host=app_config.host, - port=app_config.port, - root_path=app_config.public_url.path, - log_level=app_config.log_level.lower(), - ) - - server1 = CustomUvicornServer(config=config1) - server2 = CustomUvicornServer(config=config2) - - apps.append(server1.run()) - apps.append(server2.run()) - - return await asyncio.gather(*apps) - - -def main(): - loop = asyncio.get_event_loop() - loop.run_until_complete(run()) - - -if __name__ == "__main__": - main() diff --git a/packages/reporting-server/rest_server/__mocks__/__init__.py b/packages/reporting-server/rest_server/__mocks__/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/reporting-server/rest_server/__mocks__/parsed_data.py b/packages/reporting-server/rest_server/__mocks__/parsed_data.py deleted file mode 100644 index 43e962d76..000000000 --- a/packages/reporting-server/rest_server/__mocks__/parsed_data.py +++ /dev/null @@ -1,23 +0,0 @@ -from . import raw_data - - -def parse_log(log): - modified_log = log["log"].replace("INFO:app.BookKeeper.", "") - return modified_log - - -# States -mock_dispenser_state: str = parse_log(raw_data.mock_dispenser_state) - -mock_door_state: str = parse_log(raw_data.mock_door_state) - -mock_fleet_state: str = parse_log(raw_data.mock_fleet_state) - -mock_task_summary: str = parse_log(raw_data.mock_task_summary) - -mock_ingestor_state: str = parse_log(raw_data.mock_ingestor_state) - -mock_lift_state: str = parse_log(raw_data.mock_lift_state) - -# Health -mock_door_health: str = parse_log(raw_data.mock_door_health) diff --git a/packages/reporting-server/rest_server/__mocks__/raw_data.py b/packages/reporting-server/rest_server/__mocks__/raw_data.py deleted file mode 100644 index 7e7c1812d..000000000 --- a/packages/reporting-server/rest_server/__mocks__/raw_data.py +++ /dev/null @@ -1,67 +0,0 @@ -# States -mock_dispenser_state = { - "log": 'INFO:app.BookKeeper.dispenser_state:{"time": {"sec": 1600, "nanosec": 0}, "guid": "coke_dispenser", "mode": 0, "request_guid_queue": [], "seconds_remaining": 0.0}\n', - "stream": "stdout", - "kubernetes": { - "container_name": "app-that-writes-logs", - "namespace_name": "default", - "pod_name": "app-that-writes-logs", - "container_image": "busybox:latest", - "container_image_id": "docker-pullable://busybox@sha256:ae39a6f5c07297d7ab64dbd4f82c77c874cc6a94cea29fdec309d0992574b4f7", - "pod_id": "978761c6-2a19-422f-b710-d43da2348f1f", - "host": "minikube", - "master_url": "https://10.96.0.1:443/api", - "namespace_id": "e192acd4-e6e7-46c2-8514-44a27a367749", - }, -} - -mock_door_state = { - "log": 'INFO:app.BookKeeper.door_state:{"door_time": {"sec": 1596, "nanosec": 548000000}, "door_name": "hardware_door", "current_mode": {"value": 0}}\n', - "stream": "stdout", -} - -mock_fleet_state = { - "log": 'INFO:app.BookKeeper.fleet_state:{"name": "tinyRobot", "robots": [{"name": "tinyRobot1", "model": "", "task_id": "", "seq": 3190, "mode": {"mode": 1, "mode_request_id": 0}, "battery_percent": 100.0, "location": {"t": {"sec": 1598, "nanosec": 184999999}, "x": 11.553672790527344, "y": -11.317496299743652, "yaw": -1.599777340888977, "level_name": "L1", "index": 0}, "path": []}, {"name": "tinyRobot2", "model": "", "task_id": "", "seq": 3191, "mode": {"mode": 1, "mode_request_id": 0}, "battery_percent": 100.0, "location": {"t": {"sec": 1598, "nanosec": 685999999}, "x": 15.157517433166504, "y": -11.228611946105957, "yaw": -1.5839587450027466, "level_name": "L1", "index": 0}, "path": []}]}\n', - "stream": "stdout", -} - -mock_task_summary = { - "log": 'INFO:app.BookKeeper.task_summary:{"fleet_name": "tinyRobot", "task_id": "Loop0", "task_profile": {"task_id": "Loop0", "submission_time": {"sec": 131, "nanosec": 553000000}, "description": {"start_time": {"sec": 1623383402, "nanosec": 0}, "priority": {"value": 0}, "task_type": {"type": 1}, "station": {"task_id": "", "robot_type": "", "place_name": ""}, "loop": {"task_id": "", "robot_type": "", "num_loops": 1, "start_name": "supplies", "finish_name": "coe"}, "delivery": {"task_id": "", "items": [], "pickup_place_name": "", "pickup_dispenser": "", "pickup_behavior": {"name": "", "parameters": []}, "dropoff_place_name": "", "dropoff_ingestor": "", "dropoff_behavior": {"name": "", "parameters": []}}, "clean": {"start_waypoint": ""}}}, "state": 0, "status": "", "submission_time": {"sec": 0, "nanosec": 0}, "start_time": {"sec": 1623383362, "nanosec": 348338289}, "end_time": {"sec": 1623383449, "nanosec": 79154833}, "robot_name": "tinyRobot2"}\n', - "stream": "stdout", -} - -mock_ingestor_state = { - "log": 'INFO:app.BookKeeper.ingestor_state:{"time": {"sec": 1600, "nanosec": 0}, "guid": "coke_ingestor", "mode": 0, "request_guid_queue": [], "seconds_remaining": 0.0}\n', - "stream": "stdout", -} - -mock_lift_state = { - "log": 'INFO:app.BookKeeper.lift_state: {"lift_name": "test_lift", "lift_time": 0, "available_floors": ["L1", "L2"], "current_floor": "L1", "destination_floor": "L2", "door_state": 0, "motion_state": 0, "available_modes": [0], "current_mode": 0, "session_id": "test_session"}\n', - "stream": "stdout", -} - - -# Health -mock_door_health = { - "log": 'INFO:app.BookKeeper.door_health:{"id": "hardware_door", "health_status": "HealthStatus.HEALTHY", "health_message": null}\n', - "stream": "stdout", -} - -# Keycloak -mock_keycloak_login_error = { - "log": '20:41:54,721 INFO [org.keycloak.events] (default task-2) JSON_EVENT::{"type":"LOGIN_ERROR","realmId":"579ce396-83c7-4094-964d-7ea07553089f","clientId":"reporting","ipAddress":"192.168.49.1","error":"user_not_found","auth_method":"openid-connect","auth_type":"code","redirect_uri":"https://example.com/reporting","code_id":"f813403c-2732-4062-9911-cf65b89a2278","username":"test"}', - "stream": "stdout", - "kubernetes": { - "container_name": "app-that-writes-logs", - }, -} - -mock_keycloak_login = { - "log": '19:47:08,004 INFO [org.keycloak.events] (default task-3) JSON_EVENT::{"type":"LOGIN","realmId":"master","clientId":"security-admin-console","userId":"7d2f3cdd-9778-4847-ab9d-db68f70f043f","ipAddress":"172.22.0.1","auth_method":"openid-connect","auth_type":"code","redirect_uri":"http://localhost:8080/auth/admin/master/console/","consent":"no_consent_required","code_id":"ac8c82d7-45ac-4227-86d3-e167b176e26f","username":"admin"}', - "stream": "stdout", -} - -mock_keycloak_logout = { - "log": '19:47:20,649 INFO [org.keycloak.events] (default task-6) JSON_EVENT::{"type":"LOGOUT","realmId":"master","userId":"7d2f3cdd-9778-4847-ab9d-db68f70f043f","ipAddress":"172.22.0.1","redirect_uri":"http://localhost:8080/auth/admin/master/console/#/realms/master"}', - "stream": "stdout", -} diff --git a/packages/reporting-server/rest_server/app.py b/packages/reporting-server/rest_server/app.py deleted file mode 100644 index 4c38d2172..000000000 --- a/packages/reporting-server/rest_server/app.py +++ /dev/null @@ -1,53 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order - -import logging -import os -import sys - -from dependencies import auth_scheme, logger -from fastapi import Depends, FastAPI -from fastapi.middleware.cors import CORSMiddleware -from rest_server.database import setup_database -from rest_server.routers import log_router, report_router - -from .app_config import SystemMode - -logger = logging.getLogger("rest_app") -handler = logging.StreamHandler(sys.stdout) -handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT)) -logger.addHandler(handler) -if "RMF_REST_SERVER_DEBUG" in os.environ: - logger.setLevel(logging.DEBUG) -else: - logger.setLevel(logging.INFO) - -logger.info("started app") - - -def get_app(run_config=SystemMode.ALL): - - app = FastAPI() - - app.add_middleware( - CORSMiddleware, - allow_origins=["*"], - allow_credentials=False, - allow_methods=["*"], - allow_headers=["*"], - ) - - if run_config in (SystemMode.ALL, SystemMode.FLUENTD): - app.include_router(log_router, prefix="/log", tags=["log"]) - - if run_config in (SystemMode.ALL, SystemMode.REPORT): - app.include_router( - report_router, - prefix="/report", - tags=["report"], - dependencies=[Depends(auth_scheme)], - ) - - setup_database(app) - - return app diff --git a/packages/reporting-server/rest_server/app_config.py b/packages/reporting-server/rest_server/app_config.py deleted file mode 100644 index 7524d79de..000000000 --- a/packages/reporting-server/rest_server/app_config.py +++ /dev/null @@ -1,46 +0,0 @@ -import importlib.util -import os -import urllib.parse -from dataclasses import dataclass -from enum import Enum -from typing import Optional - - -class SystemMode(Enum): - ALL = 1 - REPORT = 2 - FLUENTD = 3 - - -@dataclass -class AppConfig: - host: str - port: int - port_fluentd: int - db_url: str - public_url: urllib.parse.ParseResult - static_directory: str - log_level: str - jwt_public_key: Optional[str] - oidc_url: Optional[str] - aud: str - iss: Optional[str] - log_storage_time: int - - def __post_init__(self): - self.public_url = urllib.parse.urlparse(self.public_url) - - -def _load_config() -> AppConfig: - if "RMF_REPORT_REST_SERVER_CONFIG" in os.environ: - config_file = os.environ["RMF_REPORT_REST_SERVER_CONFIG"] - else: - config_file = f"{os.path.dirname(__file__)}/default_config.py" - - spec = importlib.util.spec_from_file_location("config", config_file) - module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) - return AppConfig(**module.config) - - -app_config = _load_config() diff --git a/packages/reporting-server/rest_server/authenticator.py b/packages/reporting-server/rest_server/authenticator.py deleted file mode 100644 index 5d24f4cd3..000000000 --- a/packages/reporting-server/rest_server/authenticator.py +++ /dev/null @@ -1,30 +0,0 @@ -import jwt - -from .app_config import app_config - - -class AuthenticationError(Exception): - pass - - -class JwtAuthenticator: - def __init__(self, pem_file: str): - """ - Authenticates with a JWT token, the client must send an auth params with - a "token" key. - :param pem_file: path to a pem encoded certificate used to verify a token. - """ - with open(pem_file, "br") as f: - self._public_key = f.read() - - def verify_token(self, token: str): - try: - jwt.decode( - token, - self._public_key, - algorithms=["RS256"], - audience=app_config.aud, - issuer=app_config.iss, - ) - except jwt.InvalidTokenError as e: - raise AuthenticationError(str(e)) from e diff --git a/packages/reporting-server/rest_server/clean_logs.py b/packages/reporting-server/rest_server/clean_logs.py deleted file mode 100644 index 04daf2d2f..000000000 --- a/packages/reporting-server/rest_server/clean_logs.py +++ /dev/null @@ -1,85 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order - - -import logging -import os -import sys -from datetime import datetime, timedelta - -from dependencies import logger -from models.tortoise_models import ( - AuthEvents, - DispenserState, - DoorState, - FleetState, - HealthStatus, - IngestorState, - LiftState, - RawLog, - TaskSummary, -) -from tortoise import Tortoise, run_async - -from .app_config import app_config - -logger = logging.getLogger("clean_script") -handler = logging.StreamHandler(sys.stdout) -handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT)) -logger.addHandler(handler) -if "RMF_REST_SERVER_DEBUG" in os.environ: - logger.setLevel(logging.DEBUG) -else: - logger.setLevel(logging.INFO) - -logger.info("started clean up") - -reportingModels = [ - AuthEvents, - DispenserState, - DoorState, - FleetState, - HealthStatus, - IngestorState, - LiftState, - RawLog, - TaskSummary, -] - -number_of_days_to_keep_logs = app_config.log_storage_time + 60 - -logger.info( - "You are about to delete all the logs older than %s days", - str(app_config.log_storage_time), -) - - -async def delete_logs(): - - for model in reportingModels: - rows = await model.filter( - created__lt=datetime.now() - timedelta(days=number_of_days_to_keep_logs) - ) - - logger.info("%s has %s rows > 7 days", str(model.__module__), str(len(rows))) - - await model.filter( - created__lt=datetime.now() - timedelta(days=number_of_days_to_keep_logs) - ).delete() - - -async def run(): - await Tortoise.init( - db_url=app_config.db_url, - modules={"models": ["models.tortoise_models"]}, - ) - await Tortoise.generate_schemas() - await delete_logs() - - -def main(): - run_async(run()) - - -if __name__ == "__main__": - main() diff --git a/packages/reporting-server/rest_server/database.py b/packages/reporting-server/rest_server/database.py deleted file mode 100644 index b55b6e61f..000000000 --- a/packages/reporting-server/rest_server/database.py +++ /dev/null @@ -1,18 +0,0 @@ -from fastapi import FastAPI -from tortoise import Tortoise -from tortoise.contrib.fastapi import register_tortoise - -from .app_config import app_config - - -def setup_database(app: FastAPI): - register_tortoise( - app, - db_url=app_config.db_url, - modules={"models": ["models.tortoise_models"]}, - generate_schemas=True, - add_exception_handlers=True, - ) - - -Tortoise.init_models(["models.tortoise_models"], "models") diff --git a/packages/reporting-server/rest_server/default_config.py b/packages/reporting-server/rest_server/default_config.py deleted file mode 100644 index f843f5875..000000000 --- a/packages/reporting-server/rest_server/default_config.py +++ /dev/null @@ -1,30 +0,0 @@ -# pylint: disable=line-too-long -config = { - "host": "127.0.0.1", # ip or hostname to bind the socket to - "port": 8002, - "port_fluentd": 8003, - "db_url": "sqlite://:memory:", - # url that reporting-server is being served on. - # When being a proxy, this must be the url that reporting-server is mounted on. - # E.g. https://example.com/logserver/api/v1 - "public_url": "http://localhost:8002", - # The directory where static files should be stored. - "static_directory": "static", - "log_level": "INFO", # https://docs.python.org/3.8/library/logging.html#levels - # path to a PEM encoded RSA public key which is used to verify JWT tokens, if the path is relative, it is based on the working dir. - "jwt_public_key": None, - # url to the oidc endpoint, used to authenticate rest requests, it should point to the well known endpoint, e.g. - # http://localhost:8080/auth/realms/rmf-web/.well-known/openid-configuration. - # NOTE: This is ONLY used for documentation purposes, the "jwt_public_key" will be the - # only key used to verify a token. - "oidc_url": None, - # Audience the access token is meant for. Can also be an array. - # Used to verify the "aud" claim. - "aud": "localhost", - # url or string that identifies the entity that issued the jwt token - # Used to verify the "iss" claim - # If iss is set to None, it means that authentication should be disabled - "iss": None, - # Number of days to store logs - "log_storage_time": 7, -} diff --git a/packages/reporting-server/rest_server/repositories/__init__.py b/packages/reporting-server/rest_server/repositories/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/reporting-server/rest_server/repositories/log_creation_handler.py b/packages/reporting-server/rest_server/repositories/log_creation_handler.py deleted file mode 100644 index 441bfc08c..000000000 --- a/packages/reporting-server/rest_server/repositories/log_creation_handler.py +++ /dev/null @@ -1,101 +0,0 @@ -import logging - -from dependencies import logger -from models.tortoise_models.auth_events import AuthEvents -from models.tortoise_models.container import Container -from models.tortoise_models.raw_log import RawLog -from parsers.auth_event_parser import auth_event_parser -from parsers.log_type_parser import get_log_type - -# Function that receives all the logs and store them on the database - -logger = logging.getLogger("rest_app:log_creation_handler") - - -""" -Formats support: - -1. [{log:"text or json", kubernetes:{...} },{log:{...}, kubernetes:{...}] - -2. ['text','text','text'] - -""" - - -class RawLogHandler: - @staticmethod - def _is_valid_request(logs: list): - if len(logs) == 0: - return False - return True - - @staticmethod - async def _dict_raw_log_handler(log: dict): - log_level = get_log_type(log["log"], log["stream"]) - - if "kubernetes" in log and "container_name" in log["kubernetes"]: - container = await Container.get_or_create( - name=log["kubernetes"]["container_name"] - ) - - await RawLog.create( - level=log_level, - message=log["log"], - container=container[0], - ) - else: - await RawLog.create(level=log_level, message=log["log"]) - - @staticmethod - async def _text_raw_log_handler(log: str): - log_level = get_log_type(log) - await RawLog.create(level=log_level, message=log) - - @staticmethod - async def create_raw_log(logs: list): - if not RawLogHandler._is_valid_request(logs): - return "No valid data" - - error_logs = [] - - for log in logs: - try: - if isinstance(log, dict): - if "log" not in log: - error_msg = ( - "Error: format not supported. Failed to create this log " - + str(log) - ) - logger.error(error_msg) - error_logs.append(error_msg) - continue - await RawLogHandler._dict_raw_log_handler(log) - - elif isinstance(log, str): - if log.isspace(): - continue - await RawLogHandler._text_raw_log_handler(log) - - except (SyntaxError, ValueError, KeyError) as e: - error_logs.append("Error:" + str(e) + "Log:" + str(log)) - - return error_logs if len(error_logs) > 0 else "Logs were saved correctly" - - -async def create_keycloak_log(logs: list): - if len(logs) == 0: - return "No data received" - error_logs = [] - - for log in logs: - try: - # If it not data app, we will skip it because the create_raw_log in theory will register that log - if "JSON_EVENT::" not in log["log"]: - continue - auth_event = await auth_event_parser(log["log"]) - await AuthEvents.create(**auth_event) - - except (SyntaxError, ValueError, KeyError) as e: - error_logs.append("Error:" + str(e) + "Log:" + str(log)) - - return error_logs if len(error_logs) > 0 else "Logs were saved correctly" diff --git a/packages/reporting-server/rest_server/repositories/parser_dispatcher.py b/packages/reporting-server/rest_server/repositories/parser_dispatcher.py deleted file mode 100644 index 15ecc6683..000000000 --- a/packages/reporting-server/rest_server/repositories/parser_dispatcher.py +++ /dev/null @@ -1,103 +0,0 @@ -from models.tortoise_models.dispenser_state import DispenserState -from models.tortoise_models.door import Door -from models.tortoise_models.door_state import DoorState -from models.tortoise_models.fleet import Fleet, Robot -from models.tortoise_models.fleet_state import FleetState -from models.tortoise_models.health import Device, HealthStatus -from models.tortoise_models.ingestor_state import IngestorState -from models.tortoise_models.lift import Lift -from models.tortoise_models.lift_state import LiftState -from models.tortoise_models.task_summary import TaskSummary -from parsers.dispenser_state_parser import dispenser_state_parser -from parsers.doors_state_parser import doors_state_parser -from parsers.fleet_state_parser import fleet_state_parser -from parsers.health_parser import health_status_parser -from parsers.ingestor_state_parser import ingestor_state_parser -from parsers.lift_state_parser import lift_state_parser -from parsers.task_summary_parser import task_summary_parser - - -async def create_health_status(data): - device = await Device.get_or_create(actor=data["actor_id"], type=data["device"]) - await HealthStatus.create( - device=device[0], - health_status=data["health_status"], - health_message=data["health_message"], - ) - - -# This function dispatchs to the correct handler dependending on the text content. - - -async def log_model_dispatcher(fullstring: str): - if "dispenser_state:" in fullstring.lower(): - data = await dispenser_state_parser(fullstring) - await DispenserState.create(**data) - - elif "door_state:" in fullstring.lower(): - data = await doors_state_parser(fullstring) - door = await Door.get_or_create(name=data["name"]) - await DoorState.create(state=data["state"], door=door[0]) - - elif "fleet_state:" in fullstring.lower(): - robot_states = await fleet_state_parser(fullstring) - - if len(robot_states) == 0: - return - - for robot_state in robot_states: - fleet = await Fleet.get_or_create(name=robot_state["fleet_name"]) - robot = await Robot.get_or_create( - name=robot_state["robot_name"], model=robot_state["robot_model"] - ) - del robot_state["fleet_name"] - del robot_state["robot_name"] - del robot_state["robot_model"] - - await FleetState.create( - fleet=fleet[0], - robot=robot[0], - **robot_state, - ) - - elif "lift_state:" in fullstring.lower(): - data = await lift_state_parser(fullstring) - lift = await Lift.get_or_create(name=data["name"]) - del data["name"] - await LiftState.create(lift=lift[0], **data) - - elif "ingestor_state:" in fullstring.lower(): - data = await ingestor_state_parser(fullstring) - await IngestorState.create(**data) - - elif "task_summary:" in fullstring.lower(): - data = await task_summary_parser(fullstring) - fleet = await Fleet.get_or_create(name=data["fleet_name"]) - robot = await Robot.get_or_create( - name=data["robot_name"], - ) - del data["fleet_name"] - del data["robot_name"] - await TaskSummary.create(fleet=fleet[0], robot=robot[0], **data) - - # Health - elif "dispenser_health:" in fullstring.lower(): - data = await health_status_parser(fullstring, "dispenser_health") - await create_health_status(data) - - elif "door_health:" in fullstring.lower(): - data = await health_status_parser(fullstring, "door_health") - - await create_health_status(data) - - elif "ingestor_health:" in fullstring.lower(): - data = await health_status_parser(fullstring, "ingestor_health") - await create_health_status(data) - - elif "lift_health:" in fullstring.lower(): - data = await health_status_parser(fullstring, "lift_health") - await create_health_status(data) - - elif "robot_health:" in fullstring.lower(): - data = await health_status_parser(fullstring, "robot_health") - await create_health_status(data) diff --git a/packages/reporting-server/rest_server/repositories/report/__init__.py b/packages/reporting-server/rest_server/repositories/report/__init__.py deleted file mode 100644 index 59716c060..000000000 --- a/packages/reporting-server/rest_server/repositories/report/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -from .auth_event_report import ( - get_user_login_failure_report, - get_user_login_report, - get_user_logout_report, -) -from .dispenser_state import get_dispenser_state -from .door_state import get_door_state -from .fleet_state import get_fleet_state -from .health import get_health -from .ingestor_state import get_ingestor_state -from .lift_state import get_lift_state -from .raw_log import get_all_raw_logs, get_containers -from .task_summary import get_task_summary diff --git a/packages/reporting-server/rest_server/repositories/report/auth_event_report.py b/packages/reporting-server/rest_server/repositories/report/auth_event_report.py deleted file mode 100644 index e028f965d..000000000 --- a/packages/reporting-server/rest_server/repositories/report/auth_event_report.py +++ /dev/null @@ -1,59 +0,0 @@ -from datetime import timezone -from typing import Optional - -from dateutil import parser -from models.pydantic_models import AuthEvents_Pydantic -from models.tortoise_models.auth_events import AuthEvents - - -async def get_user_login_report( - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, -): - return await get_auth_events("LOGIN", offset, limit, to_log_date, from_log_date) - - -async def get_user_logout_report( - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, -): - return await get_auth_events("LOGOUT", offset, limit, to_log_date, from_log_date) - - -async def get_user_login_failure_report( - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, -): - return await get_auth_events( - "LOGIN_ERROR", offset, limit, to_log_date, from_log_date - ) - - -async def get_auth_events( - event_type: str, - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, -): - query = {} - query["event_type"] = event_type - if from_log_date: - local_time = parser.parse(from_log_date) - utc_time = local_time.astimezone(timezone.utc) - query["created__gte"] = utc_time - - if to_log_date: - to_log_local_time = parser.parse(to_log_date) - to_log_utc_time = to_log_local_time.astimezone(timezone.utc) - query["created__lt"] = to_log_utc_time - - return await AuthEvents_Pydantic.from_queryset( - AuthEvents.filter(**query).offset(offset).limit(limit).order_by("-created") - ) diff --git a/packages/reporting-server/rest_server/repositories/report/dispenser_state.py b/packages/reporting-server/rest_server/repositories/report/dispenser_state.py deleted file mode 100644 index 32322b4ee..000000000 --- a/packages/reporting-server/rest_server/repositories/report/dispenser_state.py +++ /dev/null @@ -1,18 +0,0 @@ -from typing import Optional - -from models.pydantic_models import DispenserState_Pydantic -from models.tortoise_models.dispenser_state import DispenserState -from rest_server.repositories.report.utils import get_date_range_query - - -async def get_dispenser_state( - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, -): - query = get_date_range_query(to_log_date, from_log_date) - - return await DispenserState_Pydantic.from_queryset( - DispenserState.filter(**query).offset(offset).limit(limit).order_by("-created") - ) diff --git a/packages/reporting-server/rest_server/repositories/report/door_state.py b/packages/reporting-server/rest_server/repositories/report/door_state.py deleted file mode 100644 index cb8c1ba99..000000000 --- a/packages/reporting-server/rest_server/repositories/report/door_state.py +++ /dev/null @@ -1,25 +0,0 @@ -from typing import Optional - -from models.pydantic_models import DoorState_Pydantic -from models.tortoise_models.door_state import DoorState -from rest_server.repositories.report.utils import get_date_range_query - - -async def get_door_state( - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, -): - - query = get_date_range_query(to_log_date, from_log_date) - - queryset = ( - DoorState.filter(**query) - .prefetch_related("door") - .offset(offset) - .limit(limit) - .order_by("-created") - ) - - return await DoorState_Pydantic.from_queryset(queryset) diff --git a/packages/reporting-server/rest_server/repositories/report/fleet_state.py b/packages/reporting-server/rest_server/repositories/report/fleet_state.py deleted file mode 100644 index 1423e228c..000000000 --- a/packages/reporting-server/rest_server/repositories/report/fleet_state.py +++ /dev/null @@ -1,25 +0,0 @@ -from typing import Optional - -from models.pydantic_models import FleetState_Pydantic -from models.tortoise_models.fleet_state import FleetState -from rest_server.repositories.report.utils import get_date_range_query - - -async def get_fleet_state( - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, -): - query = get_date_range_query(to_log_date, from_log_date) - - queryset = ( - FleetState.filter(**query) - .prefetch_related("fleet") - .prefetch_related("robot") - .offset(offset) - .limit(limit) - .order_by("-created") - ) - - return await FleetState_Pydantic.from_queryset(queryset) diff --git a/packages/reporting-server/rest_server/repositories/report/health.py b/packages/reporting-server/rest_server/repositories/report/health.py deleted file mode 100644 index 5d3ca2ca3..000000000 --- a/packages/reporting-server/rest_server/repositories/report/health.py +++ /dev/null @@ -1,24 +0,0 @@ -from typing import Optional - -from models.pydantic_models import HealthStatus_Pydantic -from models.tortoise_models.health import HealthStatus -from rest_server.repositories.report.utils import get_date_range_query - - -async def get_health( - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, -): - query = get_date_range_query(to_log_date, from_log_date) - - queryset = ( - HealthStatus.filter(**query) - .prefetch_related("device") - .offset(offset) - .limit(limit) - .order_by("-created") - ) - - return await HealthStatus_Pydantic.from_queryset(queryset) diff --git a/packages/reporting-server/rest_server/repositories/report/ingestor_state.py b/packages/reporting-server/rest_server/repositories/report/ingestor_state.py deleted file mode 100644 index 6c6050bef..000000000 --- a/packages/reporting-server/rest_server/repositories/report/ingestor_state.py +++ /dev/null @@ -1,18 +0,0 @@ -from typing import Optional - -from models.pydantic_models import IngestorState_Pydantic -from models.tortoise_models.ingestor_state import IngestorState -from rest_server.repositories.report.utils import get_date_range_query - - -async def get_ingestor_state( - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, -): - query = get_date_range_query(to_log_date, from_log_date) - - return await IngestorState_Pydantic.from_queryset( - IngestorState.filter(**query).offset(offset).limit(limit).order_by("-created") - ) diff --git a/packages/reporting-server/rest_server/repositories/report/lift_state.py b/packages/reporting-server/rest_server/repositories/report/lift_state.py deleted file mode 100644 index e221816c5..000000000 --- a/packages/reporting-server/rest_server/repositories/report/lift_state.py +++ /dev/null @@ -1,25 +0,0 @@ -from typing import Optional - -from models.pydantic_models import LiftState_Pydantic -from models.tortoise_models.lift_state import LiftState -from rest_server.repositories.report.utils import get_date_range_query - - -async def get_lift_state( - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, -): - - query = get_date_range_query(to_log_date, from_log_date) - - queryset = ( - LiftState.filter(**query) - .prefetch_related("lift") - .offset(offset) - .limit(limit) - .order_by("-created") - ) - - return await LiftState_Pydantic.from_queryset(queryset) diff --git a/packages/reporting-server/rest_server/repositories/report/raw_log.py b/packages/reporting-server/rest_server/repositories/report/raw_log.py deleted file mode 100644 index ec563c622..000000000 --- a/packages/reporting-server/rest_server/repositories/report/raw_log.py +++ /dev/null @@ -1,49 +0,0 @@ -from datetime import timezone -from typing import Optional - -from dateutil import parser -from models.pydantic_models import RawLog_Pydantic -from models.tortoise_models.container import Container -from models.tortoise_models.raw_log import RawLog - - -async def get_all_raw_logs( - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, - log_level: Optional[str] = None, - container_label: Optional[str] = None, -): - query = {} - - if from_log_date: - local_time = parser.parse(from_log_date) - utc_time = local_time.astimezone(timezone.utc) - query["created__gte"] = utc_time - - if to_log_date: - to_log_local_time = parser.parse(to_log_date) - to_log_utc_time = to_log_local_time.astimezone(timezone.utc) - query["created__lt"] = to_log_utc_time - - if container_label and container_label != "all": - query["container__name__iexact"] = container_label - - if log_level and log_level != "all": - query["level__iexact"] = log_level - - rawlog_queryset = ( - RawLog.filter(**query) - .prefetch_related("container") - .offset(offset) - .limit(limit) - .order_by("-created") - ) - - return await RawLog_Pydantic.from_queryset(rawlog_queryset) - - -async def get_containers(): - raw_containers = await Container.all() - return [x.name for x in raw_containers] diff --git a/packages/reporting-server/rest_server/repositories/report/task_summary.py b/packages/reporting-server/rest_server/repositories/report/task_summary.py deleted file mode 100644 index 609b4c5f9..000000000 --- a/packages/reporting-server/rest_server/repositories/report/task_summary.py +++ /dev/null @@ -1,25 +0,0 @@ -from typing import Optional - -from models.pydantic_models import TaskSummary_Pydantic -from models.tortoise_models.task_summary import TaskSummary -from rest_server.repositories.report.utils import get_date_range_query - - -async def get_task_summary( - offset: int, - limit: int, - to_log_date: Optional[str] = None, - from_log_date: Optional[str] = None, -): - query = get_date_range_query(to_log_date, from_log_date) - - queryset = ( - TaskSummary.filter(**query) - .prefetch_related("fleet") - .prefetch_related("robot") - .offset(offset) - .limit(limit) - .order_by("-created") - ) - - return await TaskSummary_Pydantic.from_queryset(queryset) diff --git a/packages/reporting-server/rest_server/repositories/report/test_auth_event_report.py b/packages/reporting-server/rest_server/repositories/report/test_auth_event_report.py deleted file mode 100644 index 1045dd354..000000000 --- a/packages/reporting-server/rest_server/repositories/report/test_auth_event_report.py +++ /dev/null @@ -1,75 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order -import unittest - -from fastapi.testclient import TestClient -from models.tortoise_models.auth_events import AuthEvents -from rest_server.app import get_app -from rest_server.repositories.report.auth_event_report import ( - get_auth_events, - get_user_login_failure_report, - get_user_login_report, - get_user_logout_report, -) -from rest_server.test_utils import start_test_database -from tortoise import Tortoise - -app = get_app() - - -class TestReportAuthEventServerLogRoute(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - await AuthEvents.create( - username="test_user", - user_keycloak_id="test_id", - event_type="LOGIN_ERROR", - realm_id="test", - client_id="test", - ) - - await AuthEvents.create( - username="test_user", - user_keycloak_id="test_id", - event_type="LOGIN", - realm_id="test", - client_id="test", - ) - - await AuthEvents.create( - username="test_user", - user_keycloak_id="test_id", - event_type="LOGOUT", - realm_id="test", - client_id="test", - ) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - async def test_get_user_login_report(self): - login_list = await get_user_login_report(0, 10) - self.assertEqual(len(login_list), 1) - - async def test_get_user_logout_report(self): - logout_list = await get_user_logout_report(0, 10) - self.assertEqual(len(logout_list), 1) - - async def test_get_user_login_failure_report(self): - login_error_list = await get_user_login_failure_report(0, 10) - self.assertEqual(len(login_error_list), 1) - - async def test_get_auth_events(self): - login_list = await get_auth_events("LOGIN", 0, 10) - login_error_list = await get_auth_events("LOGIN_ERROR", 0, 10) - logout_list = await get_auth_events("LOGOUT", 0, 10) - - self.assertEqual(len(login_error_list), 1) - self.assertEqual(len(logout_list), 1) - self.assertEqual(len(login_list), 1) - - self.assertEqual(login_list[0].event_type, "LOGIN") - self.assertEqual(login_error_list[0].event_type, "LOGIN_ERROR") - self.assertEqual(logout_list[0].event_type, "LOGOUT") diff --git a/packages/reporting-server/rest_server/repositories/report/test_dispenser_state.py b/packages/reporting-server/rest_server/repositories/report/test_dispenser_state.py deleted file mode 100644 index 615ffd4da..000000000 --- a/packages/reporting-server/rest_server/repositories/report/test_dispenser_state.py +++ /dev/null @@ -1,35 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order -import unittest - -from fastapi.testclient import TestClient -from models.tortoise_models.dispenser_state import DispenserState, DispenserStateEnum -from rest_server.app import get_app -from rest_server.repositories.report.dispenser_state import get_dispenser_state -from rest_server.test_utils import start_test_database -from tortoise import Tortoise - -app = get_app() - - -class TestReportDispenserState(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - await DispenserState.create( - guid="guid1", - state=DispenserStateEnum.IDLE, - ) - - await DispenserState.create( - guid="guid2", - state=DispenserStateEnum.IDLE, - ) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - async def test_get_dispenser_states(self): - dispenser_list = await get_dispenser_state(0, 10) - self.assertEqual(len(dispenser_list), 2) diff --git a/packages/reporting-server/rest_server/repositories/report/test_door_state.py b/packages/reporting-server/rest_server/repositories/report/test_door_state.py deleted file mode 100644 index f4f81fbb3..000000000 --- a/packages/reporting-server/rest_server/repositories/report/test_door_state.py +++ /dev/null @@ -1,31 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order -import unittest - -from fastapi.testclient import TestClient -from models.tortoise_models.door import Door -from models.tortoise_models.door_state import DoorState, DoorStateEnum -from rest_server.app import get_app -from rest_server.repositories.report.door_state import get_door_state -from rest_server.test_utils import start_test_database -from tortoise import Tortoise - -app = get_app() - - -class TestReportDoorState(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - door = await Door.create(name="Door 1") - - await DoorState.create(door=door, state=DoorStateEnum.CLOSED) - await DoorState.create(door=door, state=DoorStateEnum.CLOSED) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - async def test_get_door_states(self): - door_list = await get_door_state(0, 10) - self.assertEqual(len(door_list), 2) diff --git a/packages/reporting-server/rest_server/repositories/report/test_fleet_state.py b/packages/reporting-server/rest_server/repositories/report/test_fleet_state.py deleted file mode 100644 index 7f31ac699..000000000 --- a/packages/reporting-server/rest_server/repositories/report/test_fleet_state.py +++ /dev/null @@ -1,48 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order -import unittest - -from fastapi.testclient import TestClient -from models.tortoise_models.fleet import Fleet, Robot -from models.tortoise_models.fleet_state import FleetState, RobotStateEnum -from rest_server.app import get_app -from rest_server.repositories.report.fleet_state import get_fleet_state -from rest_server.test_utils import start_test_database -from tortoise import Tortoise - -app = get_app() - - -class TestReportFleetState(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - robot = await Robot.create(name="Robot 1") - fleet = await Fleet.create(name="Fleet 1") - - await FleetState.create( - fleet=fleet, - robot=robot, - robot_battery_percent="100", - robot_location="1", - robot_mode=RobotStateEnum.MODE_WAITING, - robot_seq=1, - robot_task_id="test", - ) - await FleetState.create( - fleet=fleet, - robot=robot, - robot_battery_percent="100", - robot_location="1", - robot_mode=RobotStateEnum.MODE_WAITING, - robot_seq=2, - robot_task_id="test", - ) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - async def test_get_fleet_states(self): - fleet_list = await get_fleet_state(0, 10) - self.assertEqual(len(fleet_list), 2) diff --git a/packages/reporting-server/rest_server/repositories/report/test_health.py b/packages/reporting-server/rest_server/repositories/report/test_health.py deleted file mode 100644 index 67ebb4d40..000000000 --- a/packages/reporting-server/rest_server/repositories/report/test_health.py +++ /dev/null @@ -1,36 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order -import unittest - -from fastapi.testclient import TestClient -from models.tortoise_models.health import Device, HealthStatus, HealthStatusEmun -from rest_server.app import get_app -from rest_server.repositories.report.health import get_health -from rest_server.test_utils import start_test_database -from tortoise import Tortoise - -app = get_app() - - -class TestReportHealth(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - device1 = await Device.create(type="door") - device2 = await Device.create(type="lift") - await HealthStatus.create( - device=device1, - health_status=HealthStatusEmun.HEALTHY, - ) - await HealthStatus.create( - device=device2, - health_status=HealthStatusEmun.HEALTHY, - ) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - async def test_get_health_status(self): - health_list = await get_health(0, 10) - self.assertEqual(len(health_list), 2) diff --git a/packages/reporting-server/rest_server/repositories/report/test_ingestor_state.py b/packages/reporting-server/rest_server/repositories/report/test_ingestor_state.py deleted file mode 100644 index 369926be6..000000000 --- a/packages/reporting-server/rest_server/repositories/report/test_ingestor_state.py +++ /dev/null @@ -1,35 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order -import unittest - -from fastapi.testclient import TestClient -from models.tortoise_models.ingestor_state import IngestorState, IngestorStateEnum -from rest_server.app import get_app -from rest_server.repositories.report.ingestor_state import get_ingestor_state -from rest_server.test_utils import start_test_database -from tortoise import Tortoise - -app = get_app() - - -class TestReportIngestorState(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - await IngestorState.create( - guid="guid1", - state=IngestorStateEnum.IDLE, - ) - - await IngestorState.create( - guid="guid2", - state=IngestorStateEnum.IDLE, - ) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - async def test_get_ingestor_states(self): - ingestor_list = await get_ingestor_state(0, 10) - self.assertEqual(len(ingestor_list), 2) diff --git a/packages/reporting-server/rest_server/repositories/report/test_lift_state.py b/packages/reporting-server/rest_server/repositories/report/test_lift_state.py deleted file mode 100644 index ffeaa4b86..000000000 --- a/packages/reporting-server/rest_server/repositories/report/test_lift_state.py +++ /dev/null @@ -1,55 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order - -import unittest - -from fastapi.testclient import TestClient -from models.tortoise_models.lift import Lift -from models.tortoise_models.lift_state import ( - LiftDoorStateEmun, - LiftMotionStateEnum, - LiftState, - LiftStateEnum, -) -from rest_server.app import get_app -from rest_server.repositories.report.lift_state import get_lift_state -from rest_server.test_utils import start_test_database -from tortoise import Tortoise - -app = get_app() - - -class TestReportHealth(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - lift1 = await Lift.create(name="1") - lift2 = await Lift.create(name="2") - - await LiftState.create( - lift=lift1, - door_state=LiftDoorStateEmun.DOOR_CLOSED, - state=LiftStateEnum.MODE_UNKNOWN, - destination_floor="L2", - motion_state=LiftMotionStateEnum.MOTION_STOPPED, - current_floor="L1", - session_id="123", - ) - - await LiftState.create( - lift=lift2, - door_state=LiftDoorStateEmun.DOOR_CLOSED, - state=LiftStateEnum.MODE_UNKNOWN, - destination_floor="L3", - motion_state=LiftMotionStateEnum.MOTION_STOPPED, - current_floor="L2", - session_id="123", - ) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - async def test_get_lift_state(self): - lift_list = await get_lift_state(0, 10) - self.assertEqual(len(lift_list), 2) diff --git a/packages/reporting-server/rest_server/repositories/report/test_raw_log.py b/packages/reporting-server/rest_server/repositories/report/test_raw_log.py deleted file mode 100644 index 6b52a3c28..000000000 --- a/packages/reporting-server/rest_server/repositories/report/test_raw_log.py +++ /dev/null @@ -1,45 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order -import unittest - -from fastapi.testclient import TestClient -from rest_server.app import get_app -from rest_server.repositories.log_creation_handler import RawLogHandler -from rest_server.test_utils import start_test_database -from tortoise import Tortoise - -from .raw_log import get_containers - -app = get_app() - - -class TestRmfServerLogRoute(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - async def test_raw_log_handle_creation_of_logs_with_container_name(self): - data = [ - { - "log": 'INFO:app.BookKeeper.dispenser_state:{"time": {"sec": 1600, "nanosec": 0}, "guid": "coke_dispenser", "mode": 0, "request_guid_queue": [], "seconds_remaining": 0.0}\n', - "stream": "stdout", - "kubernetes": {"container_name": "container1"}, - }, - { - "log": 'INFO:app.BookKeeper.dispenser_state:{"time": {"sec": 1600, "nanosec": 0}, "guid": "coke_dispenser", "mode": 0, "request_guid_queue": [], "seconds_remaining": 0.0}\n', - "stream": "stdout", - "kubernetes": {"container_name": "container2"}, - }, - { - "log": 'INFO:app.BookKeeper.dispenser_state:{"time": {"sec": 1600, "nanosec": 0}, "guid": "coke_dispenser", "mode": 0, "request_guid_queue": [], "seconds_remaining": 0.0}\n', - "stream": "stdout", - "kubernetes": {"container_name": "container2"}, - }, - ] - - await RawLogHandler.create_raw_log(data) - containers = await get_containers() - self.assertEqual(len(containers), 2) diff --git a/packages/reporting-server/rest_server/repositories/report/test_utils.py b/packages/reporting-server/rest_server/repositories/report/test_utils.py deleted file mode 100644 index 708c739d7..000000000 --- a/packages/reporting-server/rest_server/repositories/report/test_utils.py +++ /dev/null @@ -1,39 +0,0 @@ -from datetime import timezone -from unittest import TestCase - -from dateutil import parser -from rest_server.repositories.report.utils import get_date_range_query - - -class TestCaseUtils(TestCase): - def setUp(self): - self.raw_from_log_date = "2018-01-01" - self.raw_to_log_date = "2018-02-01" - - self.from_log_date = parser.parse(self.raw_from_log_date).astimezone( - timezone.utc - ) - self.to_log_date = parser.parse(self.raw_to_log_date).astimezone(timezone.utc) - - def test_get_date_range_query_with_no_date_range(self): - self.assertEqual(get_date_range_query(), {}) - - def test_get_date_range_query(self): - self.assertEqual( - get_date_range_query( - to_log_date=self.raw_to_log_date, from_log_date=self.raw_from_log_date - ), - {"created__gte": self.from_log_date, "created__lt": self.to_log_date}, - ) - - def test_get_date_range_with_to_log_date(self): - self.assertEqual( - get_date_range_query(to_log_date=self.raw_to_log_date), - {"created__lt": self.to_log_date}, - ) - - def test_get_date_range_with_from_log_date(self): - self.assertEqual( - get_date_range_query(from_log_date=self.raw_from_log_date), - {"created__gte": self.from_log_date}, - ) diff --git a/packages/reporting-server/rest_server/repositories/report/utils.py b/packages/reporting-server/rest_server/repositories/report/utils.py deleted file mode 100644 index a40a67a40..000000000 --- a/packages/reporting-server/rest_server/repositories/report/utils.py +++ /dev/null @@ -1,23 +0,0 @@ -from datetime import timezone -from typing import Optional - -from dateutil import parser - - -def get_date_range_query( - to_log_date: Optional[str] = None, from_log_date: Optional[str] = None -): - - query = {} - - if from_log_date: - local_time = parser.parse(from_log_date) - utc_time = local_time.astimezone(timezone.utc) - query["created__gte"] = utc_time - - if to_log_date: - to_log_local_time = parser.parse(to_log_date) - to_log_utc_time = to_log_local_time.astimezone(timezone.utc) - query["created__lt"] = to_log_utc_time - - return query diff --git a/packages/reporting-server/rest_server/repositories/rmf_log_creation_handler.py b/packages/reporting-server/rest_server/repositories/rmf_log_creation_handler.py deleted file mode 100644 index 574b46095..000000000 --- a/packages/reporting-server/rest_server/repositories/rmf_log_creation_handler.py +++ /dev/null @@ -1,28 +0,0 @@ -import logging - -from .parser_dispatcher import log_model_dispatcher - -# Function that receives all the logs and store them on the database - -logger = logging.getLogger("rest_app:log_creation_handler") - - -# We want to grab specific data from this list of strings, so we need to preprocess -# this information -async def create_rmf_server_log(logs: list): - if len(logs) == 0: - return "No data received" - error_logs = [] - - for log in logs: - try: - # If it not data app, we will skip it because the create_raw_log in theory will register that log - if "INFO:app.BookKeeper." not in log["log"]: - continue - modified_log = log["log"].replace("INFO:app.BookKeeper.", "") - await log_model_dispatcher(modified_log) - - except (SyntaxError, ValueError, KeyError) as e: - error_logs.append("Error:" + str(e) + "Log:" + str(log)) - - return error_logs if len(error_logs) > 0 else "Logs were saved correctly" diff --git a/packages/reporting-server/rest_server/repositories/test_log_creation_handler.py b/packages/reporting-server/rest_server/repositories/test_log_creation_handler.py deleted file mode 100644 index 668586a75..000000000 --- a/packages/reporting-server/rest_server/repositories/test_log_creation_handler.py +++ /dev/null @@ -1,75 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order -import unittest - -from fastapi.testclient import TestClient -from models.tortoise_models import RawLog -from models.tortoise_models.auth_events import AuthEvents -from rest_server.__mocks__ import raw_data -from rest_server.app import get_app -from rest_server.test_utils import start_test_database -from tortoise import Tortoise - -from .log_creation_handler import RawLogHandler, create_keycloak_log - -app = get_app() - - -class TestCaseRawLogCreationRepository(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - self.RawLogHandler = RawLogHandler() - - async def asyncTearDown(self): - await Tortoise.close_connections() - - async def test_no_data_sent_to_rawlog(self): - response = await RawLogHandler.create_raw_log([]) - self.assertEqual(response, "No valid data") - - async def test_create_a_raw_log_correctly(self): - data = [ - raw_data.mock_dispenser_state, - raw_data.mock_door_state, - "this is a test", - ] - response = await RawLogHandler.create_raw_log(data) - self.assertEqual(response, "Logs were saved correctly") - - async def test_raw_log_handle_creation_of_logs(self): - data = [ - raw_data.mock_dispenser_state, - raw_data.mock_door_state, - "this is a test", - ] - await RawLogHandler.create_raw_log(data) - dispenser = await RawLog.all() - self.assertEqual(len(dispenser), 3) - - async def test_raw_log_handle_creation_of_logs_with_container_name(self): - await RawLogHandler.create_raw_log([raw_data.mock_dispenser_state]) - log = await RawLog.first().prefetch_related("container") - self.assertEqual(log.container.name, "app-that-writes-logs") - - -class TestCaseKeycloakCreationRepository(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - self.RawLogHandler = RawLogHandler() - - async def asyncTearDown(self): - await Tortoise.close_connections() - - async def test_keycloak_log_creation(self): - await create_keycloak_log( - [raw_data.mock_keycloak_login_error, raw_data.mock_keycloak_login] - ) - logs = await AuthEvents.all() - self.assertEqual(len(logs), 2) - - async def test_keycloak_logout_creation(self): - await create_keycloak_log([raw_data.mock_keycloak_logout]) - logs = await AuthEvents.all() - self.assertEqual(len(logs), 1) diff --git a/packages/reporting-server/rest_server/repositories/test_parser_dispatcher.py b/packages/reporting-server/rest_server/repositories/test_parser_dispatcher.py deleted file mode 100644 index 10d135834..000000000 --- a/packages/reporting-server/rest_server/repositories/test_parser_dispatcher.py +++ /dev/null @@ -1,120 +0,0 @@ -import unittest - -# Husky is sorting tortoise in a way that tortoise goes after our custom packages. -# and because of that the lint is failing -import tortoise -from fastapi.testclient import TestClient -from models.tortoise_models import ( - Device, - DispenserState, - Door, - DoorState, - FleetState, - HealthStatus, - IngestorState, - Lift, - LiftState, - TaskSummary, -) -from rest_server.__mocks__ import parsed_data -from rest_server.app import get_app -from rest_server.test_utils import start_test_database - -from .parser_dispatcher import log_model_dispatcher - -app = get_app() - - -class TestCaseLogParserDispatcher(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - async def asyncTearDown(self): - await tortoise.Tortoise.close_connections() - - async def test_dispenser_state_created(self): - await log_model_dispatcher(parsed_data.mock_dispenser_state) - instance = await DispenserState.first() - self.assertEqual(instance.guid, "coke_dispenser") - - async def test_door_state_created(self): - await log_model_dispatcher(parsed_data.mock_door_state) - door = await Door.first() - status = await DoorState.first() - self.assertEqual(door.name, "hardware_door") - self.assertIsNotNone(status) - - async def test_fleet_state_created(self): - await log_model_dispatcher(parsed_data.mock_fleet_state) - instance = await FleetState.all().prefetch_related("robot", "fleet") - self.assertEqual(len(instance), 2) - - async def test_fleet_state_fk_created(self): - await log_model_dispatcher(parsed_data.mock_fleet_state) - instance = await FleetState.all().prefetch_related("robot", "fleet") - self.assertEqual(len(instance), 2) - - self.assertEqual(instance[0].fleet.name, "tinyRobot") - self.assertEqual(instance[0].robot.name, "tinyRobot1") - - self.assertEqual(instance[1].fleet.name, "tinyRobot") - self.assertEqual(instance[1].robot.name, "tinyRobot2") - - async def test_task_summary_created(self): - await log_model_dispatcher(parsed_data.mock_task_summary) - instance = await TaskSummary.first() - self.assertEqual(instance.task_id, "Loop0") - self.assertEqual(instance.status, None) - - async def test_ingestor_state_created(self): - await log_model_dispatcher(parsed_data.mock_ingestor_state) - instance = await IngestorState.first() - self.assertEqual(instance.guid, "coke_ingestor") - - async def test_lift_state_created(self): - await log_model_dispatcher(parsed_data.mock_lift_state) - lift = await Lift.first() - self.assertIsNotNone(lift.name, "test_lift") - instance = await LiftState.first() - self.assertIsNotNone(instance) - self.assertEqual(instance.current_floor, "L1") - - -class TestCaseHealthParserDispatcher(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - async def asyncTearDown(self): - await tortoise.Tortoise.close_connections() - - async def test_door_health_created(self): - data = 'door_health:{"id": "hardware_door", "health_status": "HealthStatus.HEALTHY", "health_message": null}\n' - await log_model_dispatcher(data) - instance = await Device.first() - self.assertEqual(instance.actor, "hardware_door") - self.assertEqual(instance.type, "door_health") - - health_instance = await HealthStatus.first() - self.assertIsNotNone(health_instance) - - async def test_robot_health_created(self): - data = 'robot_health:{"id": "robot1", "health_status": "HealthStatus.HEALTHY", "health_message": null}\n' - await log_model_dispatcher(data) - instance = await Device.first() - self.assertEqual(instance.actor, "robot1") - self.assertEqual(instance.type, "robot_health") - - health_instance = await HealthStatus.first() - self.assertIsNotNone(health_instance) - - async def test_lift_health_created(self): - data = 'lift_health:{"id": "lift1", "health_status": "HealthStatus.HEALTHY", "health_message": null}\n' - await log_model_dispatcher(data) - instance = await Device.first() - self.assertEqual(instance.actor, "lift1") - self.assertEqual(instance.type, "lift_health") - - health_instance = await HealthStatus.first() - self.assertIsNotNone(health_instance) diff --git a/packages/reporting-server/rest_server/repositories/test_rmf_log_creation_handler.py b/packages/reporting-server/rest_server/repositories/test_rmf_log_creation_handler.py deleted file mode 100644 index 2a519daef..000000000 --- a/packages/reporting-server/rest_server/repositories/test_rmf_log_creation_handler.py +++ /dev/null @@ -1,54 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order -import unittest - -from fastapi.testclient import TestClient -from models.tortoise_models import DispenserState, Door, DoorState -from rest_server.__mocks__ import raw_data -from rest_server.app import get_app -from rest_server.repositories.rmf_log_creation_handler import create_rmf_server_log -from rest_server.test_utils import start_test_database -from tortoise import Tortoise - -app = get_app() - - -class TestCaseLogRMFServerCreationRepository(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - async def test_no_data_sent_to_rmfserver(self): - response = await create_rmf_server_log([]) - self.assertEqual(response, "No data received") - - async def test_create_a_rmfserver_log_correctly(self): - data = [raw_data.mock_dispenser_state, raw_data.mock_door_state] - response = await create_rmf_server_log(data) - self.assertEqual(response, "Logs were saved correctly") - - async def test_rmfserver_handle_and_return_error(self): - data = [ - { - "log2": 'INFO:app.BookKeeper.dispenser_state:{"time": {"sec": 1600, "nanosec": 0}, "guid": "coke_dispenser", "mode": 0, "request_guid_queue": [], "seconds_remaining": 0.0}\n', - "stream": "stdout", - }, - raw_data.mock_door_state, - ] - - response = await create_rmf_server_log(data) - self.assertEqual(len(response), 1) - - async def test_rmfserver_handle_creation_of_logs(self): - await create_rmf_server_log( - [raw_data.mock_dispenser_state, raw_data.mock_door_state] - ) - dispenser_state = await DispenserState.first() - door_state = await DoorState.first() - door = await Door.first() - self.assertEqual(dispenser_state.guid, "coke_dispenser") - self.assertEqual(door.name, "hardware_door") - self.assertIsNotNone(door_state) diff --git a/packages/reporting-server/rest_server/routers/__init__.py b/packages/reporting-server/rest_server/routers/__init__.py deleted file mode 100644 index abe2d9853..000000000 --- a/packages/reporting-server/rest_server/routers/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .log import router as log_router -from .report import router as report_router diff --git a/packages/reporting-server/rest_server/routers/log.py b/packages/reporting-server/rest_server/routers/log.py deleted file mode 100644 index 80a8b29b0..000000000 --- a/packages/reporting-server/rest_server/routers/log.py +++ /dev/null @@ -1,50 +0,0 @@ -from fastapi import APIRouter, HTTPException, status -from rest_server.repositories.log_creation_handler import ( - RawLogHandler, - create_keycloak_log, -) -from rest_server.repositories.rmf_log_creation_handler import create_rmf_server_log - -router = APIRouter() - - -# This will receive information from different sources -@router.post("/all/", tags=["all_logs"], status_code=status.HTTP_201_CREATED) -async def write_logs(body: list): - try: - return await RawLogHandler.create_raw_log(body) - except Exception as e: - print(e) - raise HTTPException(503, "cannot create the log" + str(e)) from e - - -# Will receive information from rmf-server only -@router.post( - "/rmfserver/", tags=["rmfserver_logs"], status_code=status.HTTP_201_CREATED -) -async def write_rmf_server_logs(body: list): - try: - response = await create_rmf_server_log(body) - if not isinstance(response, str): - raise HTTPException(503, "Error creating some logs" + str(response)) - - return response - - except Exception as e: - print(e) - raise HTTPException(503, "cannot create the rmfserver log" + str(e)) from e - - -# Will receive information from keycloak only -@router.post("/keycloak/", tags=["keycloak_logs"], status_code=status.HTTP_201_CREATED) -async def write_keycloak_logs(body: list): - try: - response = await create_keycloak_log(body) - if not isinstance(response, str): - raise HTTPException(503, "Error creating some logs" + str(response)) - - return response - - except Exception as e: - print(e) - raise HTTPException(503, "cannot create the keycloak log" + str(e)) from e diff --git a/packages/reporting-server/rest_server/routers/report.py b/packages/reporting-server/rest_server/routers/report.py deleted file mode 100644 index 544efd7c7..000000000 --- a/packages/reporting-server/rest_server/routers/report.py +++ /dev/null @@ -1,187 +0,0 @@ -from typing import Any, List, Optional - -from fastapi import APIRouter -from models.pydantic_models import ( - AuthEvents_Pydantic, - DispenserState_Pydantic, - DoorState_Pydantic, - FleetState_Pydantic, - HealthStatus_Pydantic, - IngestorState_Pydantic, - LiftState_Pydantic, - TaskSummary_Pydantic, -) -from rest_server.repositories.report import ( - get_all_raw_logs, - get_containers, - get_dispenser_state, - get_door_state, - get_fleet_state, - get_health, - get_ingestor_state, - get_lift_state, - get_task_summary, -) -from rest_server.repositories.report.auth_event_report import ( - get_user_login_failure_report, - get_user_login_report, - get_user_logout_report, -) - -router = APIRouter() - -LIMIT = 500 - - -@router.get("/raw_logs/", tags=["raw_logs"], response_model=List[Any]) -async def raw_logs_report( - toLogDate: Optional[str] = None, - fromLogDate: Optional[str] = None, - logLevel: Optional[str] = None, - containerLabel: Optional[str] = None, - offset: Optional[int] = 0, - limit: Optional[int] = LIMIT, -): - - return await get_all_raw_logs( - offset, limit, toLogDate, fromLogDate, logLevel, containerLabel - ) - - -@router.get("/raw_logs/containers", tags=["raw_logs_get_containers"]) -async def raw_logs_get_containers(): - return await get_containers() - - -@router.get( - "/door_state/", tags=["door_state"], response_model=List[DoorState_Pydantic] -) -async def door_state_report( - toLogDate: Optional[str] = None, - fromLogDate: Optional[str] = None, - offset: Optional[int] = 0, - limit: Optional[int] = LIMIT, -): - - return await get_door_state(offset, limit, toLogDate, fromLogDate) - - -@router.get( - "/fleet_state/", tags=["fleet_state"], response_model=List[FleetState_Pydantic] -) -async def fleet_state_report( - toLogDate: Optional[str] = None, - fromLogDate: Optional[str] = None, - offset: Optional[int] = 0, - limit: Optional[int] = LIMIT, -): - - return await get_fleet_state(offset, limit, toLogDate, fromLogDate) - - -@router.get( - "/dispenser_state/", - tags=["dispenser_state"], - response_model=List[DispenserState_Pydantic], -) -async def dispenser_state_report( - toLogDate: Optional[str] = None, - fromLogDate: Optional[str] = None, - offset: Optional[int] = 0, - limit: Optional[int] = LIMIT, -): - - return await get_dispenser_state(offset, limit, toLogDate, fromLogDate) - - -@router.get( - "/ingestor_state/", - tags=["ingestor_state"], - response_model=List[IngestorState_Pydantic], -) -async def ingestor_state_report( - toLogDate: Optional[str] = None, - fromLogDate: Optional[str] = None, - offset: Optional[int] = 0, - limit: Optional[int] = LIMIT, -): - - return await get_ingestor_state(offset, limit, toLogDate, fromLogDate) - - -@router.get( - "/lift_state/", tags=["lift_state"], response_model=List[LiftState_Pydantic] -) -async def lift_state_report( - toLogDate: Optional[str] = None, - fromLogDate: Optional[str] = None, - offset: Optional[int] = 0, - limit: Optional[int] = LIMIT, -): - - return await get_lift_state(offset, limit, toLogDate, fromLogDate) - - -@router.get("/health/", tags=["health"], response_model=List[HealthStatus_Pydantic]) -async def health_report( - toLogDate: Optional[str] = None, - fromLogDate: Optional[str] = None, - offset: Optional[int] = 0, - limit: Optional[int] = LIMIT, -): - - return await get_health(offset, limit, toLogDate, fromLogDate) - - -@router.get( - "/task_summary/", tags=["task_summary"], response_model=List[TaskSummary_Pydantic] -) -async def task_report( - toLogDate: Optional[str] = None, - fromLogDate: Optional[str] = None, - offset: Optional[int] = 0, - limit: Optional[int] = LIMIT, -): - - return await get_task_summary(offset, limit, toLogDate, fromLogDate) - - -@router.get( - "/user/login/", tags=["user_login"], response_model=List[AuthEvents_Pydantic] -) -async def user_login_report( - toLogDate: Optional[str] = None, - fromLogDate: Optional[str] = None, - offset: Optional[int] = 0, - limit: Optional[int] = LIMIT, -): - - return await get_user_login_report(offset, limit, toLogDate, fromLogDate) - - -@router.get( - "/user/logout/", tags=["user_logout"], response_model=List[AuthEvents_Pydantic] -) -async def user_logout_report( - toLogDate: Optional[str] = None, - fromLogDate: Optional[str] = None, - offset: Optional[int] = 0, - limit: Optional[int] = LIMIT, -): - - return await get_user_logout_report(offset, limit, toLogDate, fromLogDate) - - -@router.get( - "/user/loginfailure/", - tags=["user_login_failure"], - response_model=List[AuthEvents_Pydantic], -) -async def user_login_failure_report( - toLogDate: Optional[str] = None, - fromLogDate: Optional[str] = None, - offset: Optional[int] = 0, - limit: Optional[int] = LIMIT, -): - - return await get_user_login_failure_report(offset, limit, toLogDate, fromLogDate) diff --git a/packages/reporting-server/rest_server/routers/test_log.py b/packages/reporting-server/rest_server/routers/test_log.py deleted file mode 100644 index dca380efd..000000000 --- a/packages/reporting-server/rest_server/routers/test_log.py +++ /dev/null @@ -1,109 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order - -import unittest - -from fastapi.testclient import TestClient -from rest_server.__mocks__.raw_data import mock_keycloak_login_error -from rest_server.test_utils import start_test_database -from tortoise import Tortoise - -from ..app import get_app - -app = get_app() - - -class TestRawLogRoute(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - def test_log_raw_creation(self): - response = self.client.post( - "/log/all/", - json=[{"log": "test"}], - ) - assert response.status_code == 201 - - def test_error_on_bad_body_without_list(self): - self.client = TestClient(app) - response = self.client.post( - "/log/all/", - json={"log343": "test"}, - ) - assert response.status_code == 422 - - -class TestRmfServerLogRoute(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - def test_log_rmfserver_creation(self): - response = self.client.post( - "/log/rmfserver/", - json=[{"log": "test"}], - ) - assert response.status_code == 201 - - def test_error_on_bad_body(self): - self.client = TestClient(app) - response = self.client.post( - "/log/rmfserver/", - json=[{"log343": "test"}], - ) - assert response.status_code == 503 - - def test_handle_error(self): - self.client = TestClient(app) - response = self.client.post( - "/log/rmfserver/", - json=[ - {"log343": "test"}, - { - "log": 'INFO:app.BookKeeper.dispenser_state:{"time": {"sec": 1600, "nanosec": 0}, "guid": "coke_dispenser", "mode": 0, "request_guid_queue": [], "seconds_remaining": 0.0}\n', - "stream": "stdout", - }, - ], - ) - - assert response.status_code == 503 - - -class TestKeycloakRoute(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - - async def asyncTearDown(self): - await Tortoise.close_connections() - - def test_log_rmfserver_creation(self): - response = self.client.post( - "/log/keycloak/", - json=[{"log": "test"}], - ) - assert response.status_code == 201 - - def test_error_on_bad_body(self): - self.client = TestClient(app) - response = self.client.post( - "/log/keycloak/", - json=[{"log343": "test"}], - ) - assert response.status_code == 503 - - def test_handle_error(self): - self.client = TestClient(app) - response = self.client.post( - "/log/keycloak/", - json=[{"log343": "test"}, mock_keycloak_login_error], - ) - - assert response.status_code == 503 diff --git a/packages/reporting-server/rest_server/routers/test_report.py b/packages/reporting-server/rest_server/routers/test_report.py deleted file mode 100644 index fdc4d5e5f..000000000 --- a/packages/reporting-server/rest_server/routers/test_report.py +++ /dev/null @@ -1,28 +0,0 @@ -# conflicts with isort because of local non-relative import -# pylint: disable=wrong-import-order - -import unittest - -from models.tortoise_models.container import Container -from rest_server.test_utils import start_test_database -from starlette.testclient import TestClient -from tortoise import Tortoise - -from ..app import get_app - -app = get_app() - - -class TestContainerRoute(unittest.IsolatedAsyncioTestCase): - async def asyncSetUp(self): - await start_test_database() - self.client = TestClient(app) - await Container.create(name="test") - - async def asyncTearDown(self): - await Tortoise.close_connections() - - def test_get_containers(self): - response = self.client.get("report/raw_logs/containers/") - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json(), ["test"]) diff --git a/packages/reporting-server/rest_server/test_utils.py b/packages/reporting-server/rest_server/test_utils.py deleted file mode 100644 index 1180d9c58..000000000 --- a/packages/reporting-server/rest_server/test_utils.py +++ /dev/null @@ -1,9 +0,0 @@ -from tortoise import Tortoise - - -async def start_test_database(): - await Tortoise.init( - db_url="sqlite://:memory:", - modules={"models": ["models.tortoise_models"]}, - ) - await Tortoise.generate_schemas() diff --git a/packages/reporting-server/setup.py b/packages/reporting-server/setup.py deleted file mode 100644 index 30ea28796..000000000 --- a/packages/reporting-server/setup.py +++ /dev/null @@ -1,39 +0,0 @@ -from setuptools import find_packages, setup - -package_name = "reporting_server" - -setup( - name=package_name, - description="RMF reporting server", - version="0.0.0", - packages=find_packages(exclude=["tests"]), - author="Matias Bavera", - author_email="matiasbavera@gmail.com", - keywords=["RMF", "reporting"], - classifiers=[ - "Intended Audience :: Developers", - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python", - "Topic :: Software Development", - ], - install_requires=[ - "fastapi~=0.65.2", - "uvicorn[standard]~=0.13.4", - "tortoise-orm~=0.17.4", - "pyjwt[crypto]~=2.0", - "pydantic~=1.8", - "py-dateutil~=2.2", - ], - extras_require={ - "postgres": ["asyncpg~=0.22.0"], - "mysql": ["aiomysql~=0.0.21"], - "maria": ["aiomysql~=0.0.21"], - }, - entry_points={ - "console_scripts": [ - "reporting_server=rest_server.__main__:main", - "reporting_server_clean_logs=rest_server.clean_logs:main", - ], - }, - license="Apache License, Version 2.0", -) diff --git a/packages/reporting/.env b/packages/reporting/.env deleted file mode 100644 index a8f819259..000000000 --- a/packages/reporting/.env +++ /dev/null @@ -1,5 +0,0 @@ -# because we are a monorepo, some create-react-app dependencies may be installed in the root directory, -# it complains if it find such packages so we need to disable the check. -SKIP_PREFLIGHT_CHECK=true - -REACT_APP_REPORTING_SERVER=http://localhost:8000 diff --git a/packages/reporting/.gitignore b/packages/reporting/.gitignore deleted file mode 100644 index a13cc8c46..000000000 --- a/packages/reporting/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/public/assets/icons/ -/node_modules -/.pnp -.pnp.js -.resources.json - -# testing -/coverage - -# production -/build -/storybook-static -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local -.eslintcache - -npm-debug.log* -web_server.log -yarn-debug.log* -yarn-error.log* - -# test artifacts -/e2e/artifacts - -/.rmf diff --git a/packages/reporting/.storybook/main.js b/packages/reporting/.storybook/main.js deleted file mode 100644 index 195fee260..000000000 --- a/packages/reporting/.storybook/main.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - stories: ['../src/**/*.stories.tsx'], - addons: [ - '@storybook/preset-create-react-app', - '@storybook/addon-actions', - '@storybook/addon-links', - ], -}; diff --git a/packages/reporting/package.json b/packages/reporting/package.json deleted file mode 100644 index 5d0c22ced..000000000 --- a/packages/reporting/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "name": "reporting", - "version": "0.0.1", - "description": "Interface in charge of displaying reports to end users", - "main": "index.js", - "private": true, - "scripts": { - "start": "react-scripts start", - "build": "../../scripts/nws.sh build -d && react-scripts build", - "test": "../../scripts/nws.sh build -d && react-scripts test", - "test:coverage": "npm run test -- --coverage --watchAll=false", - "test:e2e": "cd e2e && npm test", - "test:e2e:dev": "cd e2e && npm run test:dev", - "eject": "react-scripts eject", - "storybook": "start-storybook -p 9009 -s public -s src/stories/static", - "build:storybook": "../../scripts/nws.sh build -d && build-storybook -s public -s src/stories" - }, - "keywords": [ - "reporting" - ], - "author": "matiasbavera@gmail.com", - "license": "Apache-2.0", - "eslintConfig": { - "extends": "react-app" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "devDependencies": { - "@fontsource/roboto": "^4.3.0", - "@storybook/addon-actions": "^6.3.7", - "@storybook/addon-essentials": "^6.3.7", - "@storybook/addon-links": "^6.3.7", - "@storybook/react": "^6.3.7", - "@testing-library/jest-dom": "^5.11.4", - "@testing-library/react": "^11.2.3", - "@testing-library/react-hooks": "^5.0.3", - "@testing-library/user-event": "^12.1.9", - "@types/debug": "^4.1.5", - "@types/jest": "^26.0.13", - "@types/react": "^17.0.19", - "@types/react-dom": "^17.0.9", - "@types/react-router": "^5.1.7", - "@types/react-router-dom": "^5.1.7", - "axios": "^0.21.1", - "clsx": "^1.1.1", - "jest-canvas-mock": "^2.3.1", - "react": "^17.0.2", - "react-components": "file:../react-components", - "react-router": "^5.2.0", - "react-router-dom": "^5.2.0", - "react-scripts": "^4.0.3", - "reporting-server": "file:../reporting-server", - "rmf-auth": "file:../rmf-auth", - "ts-node": "^9.1.1", - "typescript": "~4.4.4" - }, - "jest": { - "collectCoverageFrom": [ - "src/**/*.{js,jsx,ts,tsx}", - "!src/index.tsx", - "!src/app-config.ts", - "!src/serviceWorker.ts", - "!src/react-app-env.d.ts", - "!src/components/reporter-side-bar-structure.tsx", - "!**/stories/**", - "!**/tests/**" - ] - } -} diff --git a/packages/reporting/public/assets/aron-visuals-3jBU9TbKW7o-unsplash.jpg b/packages/reporting/public/assets/aron-visuals-3jBU9TbKW7o-unsplash.jpg deleted file mode 100644 index 8ef59a28d90d839243e76c40389d464de22fc1fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 972473 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%0Det*j1c=l2l8WNXZzbxQ}KdYaKli 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

Km`Pi=1YTwT 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%0DVRK)cW%%#Uke)QTLYjOXk|g1n2?gDEY9;$HzS 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 kxPOOv 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 I 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�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

afMk&3Up@n%C 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

-0retsH|iWDZ%Zmt~>W+40*H(^73~xocp^ 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%0ArtjSdc*{7uo4& zdcnUrB*ic_zH0oRdVoScIx zm|1Kj==Ph4wDhWdJ$ClNV%)sx?^dS{jBHv3G*HtatDf^0Ah)DjM~$cgMPjnpifC2& zkMHD&MTb??K|ONEhfig~RnFy_$$}R7Ln*h+KMh0WT&QeMRt>5hGC2bOD(uMQzt$dP z$qyFD8yk#}@V{oRpDGf4HhOBW^jas=q6Ku1wn$jSEofhz|M_lI|cU3)kQC?I%eLa zJj**c?Jek}c@a+tbdEk;T|M1Q2A ztJA%Sy&kc)#>zpOZR>gA+UKeOdGNOddOB*YPlW9ys;8K*bQ7cCo5U?MaSt{YbLdg& z(dE}?{PR?Ffpk?v-=8K0>Y8aM9N{AbD%|8WL_aONm>}%jopbnUKc-yvzDB#pE5IL4XIi@~t2;^<0 zeIh|-PG^M{vskO@5VH`2i)!B%eNja~uev1ZMB z9_H>Q?ZANTy-3Ou$iPCCDJlj^-x%X;HOsT+s+zrdInH)ky5O~_d{wH;HGe5JYGmR7UcIZ4<7HO}4$UX?9({ijlmAn7L=%AobQ)R(Jcm zwhB-O&5CaI3vg`AAT8qQ%OWGKqC%uCiNZIr39O4Uo^TvTxjH&@;93JeSquf0i~9&Q zHH8zP^uFousEM%ho_c`nq+Q(wnBCw{2hEF0e~#A`r#Sd4*6UD$QtIW}G_bwAF&A1; z&g(fQ%~F0u?{&tX0@S1Dc*UuOR?xz^W)MC!Py-)a6ZCl0sZtz~bh1Mk-}VV(2tJxA z)>riiX?EhuZnCpe^K=@It)ILmzXj-wtn?pV)cTGmbc5YC`RJOn5U|z59{niV2+y^E zpmgQ`E)9_0g`}_;cY@di4R}1AHFjc*<@kgxnJIEUto`asVl=3+lzP4mV+=@Z=bW&r z$jNqBvzMc;6j!e4936oi(76ezarmX5-@Bi|wOA_vztW`It-qLO2>g$t!+E*_;LhR? zwbt=}s&BQnTuDkbG3;`HEL^g3zA(KiY%$1haMf}|S9DsPU;sKf>o`+prh%e8D%+@8`x z*mY*1cqMs9Z+~fVy&&R9aqg4EDpmhx35`&>zi31aQ8Tzy8KoS^e32hW)e1lgT?2O| z^s_$PjeA1# zUa~1r%FQsDws{{-xXnooS0)&nd7G#BH!QwV%>S*FhjR5(OQYPP%Bm8%Ad*Zx*HnCF zLr;8*jTqo{x)b!|uM1hs0UUg}K|#8^XC=&Vb9ZTlg?5KCN8oHi91$jMwD3EJ5DDCY z*j2RAEQQq%!>0=xnC0a)exx@_u2qTiZ#64=$%Smtc0${8$jgBvqw+-n+iCv0m)KDC zRBd4B-6t;~a{l|OM_=CllGc~_qrxo~w7}-GnrRm^H{&$U06rD_4nLEpYu3K1nJ$zM zAR7v7peNmiJ*D!+U;DtG-$d5#9}GcxHbQH8r-dHG{lh`g=~qTtlCo(d4X8fDtKK#( zy}r?okY0+TS8aqS4n^%5;rhGI>qw-HBYg?VB|NrQ;=qx(+T)oauGr%+)y_fqMs%HYZP(9tE3LV+>6S zHfOGb^|lHAqcs@S^kExQ$y_&L z9evK>zu(?Pk2j6o9Z~t#e(Z-Y-Jz6KYQ{7MZ;{3Jp$&TdEkK?8wi9ARX!2pTFN+za z{^(A|g2{1&3A(3u^8|`^KiLbq{Q7gLMJQ_v6sd9p0 zL44iwYt;28DziaGb1$=TII|p09wz3J`moh60fJ4gaj8o>`A$JMj1UkN0p1%I;8&6o z{Mz+`v)!p?>JsKmnTrvY)0d0cbl6ch9&m-!i(dhOn}>S#q=S;|J&dW&OM0ECW0APY z{z6|{ZJ|}m3}eZ9Q$jY?)w+i=8@u5Px5Q=v1W%k9u381!4RYa0I)H9<;E?8WSU{v` zI9}(_DOZuH@74_`%>#aelMBXQ`{46?+#O01e7~cZ#OZThv3gR~x$J*6`quFbMAX)M z1oN!Q2z1HG)^TuU9%B~|Tjwdw{M#MU#@jSW8gPg^5K!KT=d$O&N4pwl#_5Z`+IC=Z zfquT*(oeha*+YYGRKj;HX6)H4zFd%75X3#+c5wMId-=cL2CzD*>3%6>-Pyw2bMCq% zPsnZj`pxpD!Jjr#XI6`GHAklKB-dj+-fF7(yn*?G!L}HVWmjpc-m&etnoIIYPXD$8 zpeD!En_*yhBE?StkE`iy0+NJ-{XKx1^VW_Ls5<_z%}Qe$A83`YM!3>s<@*)_%Un+e ztY?r1C7l5l8s8l{FlNcL)d6ZE_Csr#vJG$)P+r?;YdQ5bCmix|z9uiO!NF_CEzkSw zbVN6%`7sQcaCP%=F|`;jS&RNhGzyXlPLEjVamop%&ZN$u$3UxAV4bD z=W&eK*$@V2Qc=f5=Y^ZDl#MD$Ue(~Y6N$$)m-#x<;0dM=ctLnC8PXg<%Cijr{oD%Q z?3WZ-noM;0+rHQnNRB~M9iz@%+CPQ9S5z^DvEx0sIL+qk6L33C(Ncy$i|Z`f9im`9 zkg>2;!`i;+WB?u6Kax9x^(z)qcWPPM;%t|Ker!DQdiA|HHAtY)j#d+$04;PU{aUPI zHt9n;pw$KE53VWk+W%7e%FCDCg>1eRIK}FY@F7a%@=p3a3S8TKVW<3NLH@jk0*2UEK7L z+e>Fa97}iXmHZ?h_Ud{lKl7Y#zHgNx=$IJua?2CKOsX5H8iw<;13LHMFU1^c zSqHpE6uoXYOABk{{MGkncY`&g0M+Mt4v1Cvs^FAWF-b{N-~|Dv?Rb3V#p|bizs)GU zkBEZ9Ed*vZ1<4wKhM4`qIt;-ljQ1as$(1ftBS3*wny#U<^T6&Im=LDDk<3aBdcP!5B0F$X?qO=$g3^m zAEm(~kLA%GvCm)=b98VgT9Rrhu%INw~ij_m(8IXH0m? z*FTlln`ZYf`r(qn^HCNkQ`7YI6DqSESnaLuYwPEu?KR44j(MiF<*R+S)Bh&=tocyA z&>d-X#Hy0M-brmsJ5;}mYTlxKQ~1~c@bI(c;=5b7=T5Z$l?ja$Z6QWJ1<8+NM1Ab7cxpE=?Lpeh^v<)1l@F zHl+D#Gm|1ON1qkY6Sr{FasNkBusoqBv+Y_OLbJ=O;kEX41wgOE{RLnn3~1xwk*tvw zVf7Dfx#3j4f>at8rzmz|vp++UR^IJ^MnSfjQY^MkLesgaE z%K^(GT_@_zqB*(mZ9QgJ$ApJvtJ+wPpMe7wb!1!U~eYJy&U8pez z-v?JL3Pf9bSb$R~PYTBg^R?KsyVQJweY2|BiZwJ&CSK zj$GMJYqH$N1*w*ajjQDTXpYxqJFslxYR7v4HpXdrAx&}5nboRu8!i)v(?_cy^5UHO z^-!^Lj_F8ou6IQACo+P?wz853TkCc;MoX&Z_0{5UxSTA*VBPiHJ*z;-;NtLq-HS3I z7oK2R3$x%ZuP)LSQmfO5>z90MlAmj=2!82&PjU==toqJgP3~|BHS(0R!)T73MRWY- zSQDTxA_2-%`oF#;xCQhhnhH!+T@OKD0Pad5)$kX80B#&l9yYTz3h<8v4z}z5G;qDu zcwt{Uy|SEgNHn-e3XXCgtT^ykdns*9pZm&XJMkQN#vRT+3bJ%54AQVnV~iAYDKQN^ z-%j=Pl1}#<W>fbqs+p*U51A#R{2!{G07GSta+M1%bkLlX0Rc1k#jW5jBX zS-QpvVi1LjUHM3U zfzsOu<)fm8cMNNVKY=jmpEb8Y=}!vMIvJe-J%rQ3Rlj1XMx>`E6Fzw3Tt`>t|JPVZGp8mJbgXZ3r+XgKzb`jYeM_uv}^zzknTV z!Qw0zCD$EM`$w;V(w-=7CS_m+YzR=ooh&66kTH~#TACm9=AVZtq`Sg$vFlJCu_pUQ z+1Jp1DYt*i@-0%eQv;N&^a29J6k@SIE%dTpK)aaWA+J}Z4Ex2E^o+t zKO3;jdJFO~-kFF92V*hB;}sx2*2xWDvYB?HRY)&y4=ewsQPZK#d7~l?s96Vy9JRoDV{A z)T%A6lwtQ4W0?a9%1CT5KLX{n6-VzD1P+I`?s1cz2NQq7=2{N5)N%de7r>^98p&Y+ zsl>#?@u9tARE`|QBQzGAAa9JgT?zW?*R8JF5mL5Kql;&;nZ6CbT#AYnO4><#O$5`s z?>t6o-vLK$BGZBhE^l^Q=)neA22-jx6Y#bhCT<&k1%nH}0R5c%yvS4VLHZ)C$XuME zJry+8!cFF->Wb1XVjna{3|GubF1=?q91YwI_zPd_Mnr?p%~dC7RH&U%V;Den%ZP3! zFCDuP2loj4Lg$Iex=7X7S8eYV$FgOsx=*%jx={|cTgRfu1NX=&Z{gEEPQ<`Y`1;*O zV*2G12lOfR%*&D!!FGU^cpU^c;CRwD7Ta|c;MevQc(0X6y14mzrQ6F_CV8^M?Mb`Jat*WdkDR1dD!PD9nckVv_|8` zuO>@c>S%h*pUBJmr*a+)_9>d~N3d5)z^BdXH-loD1C|{@%#h*nd!1}b&JaN^^JLj_`n7>xU}zjdE1bB ziJ3k$lwr(3fd0+{Mn)x`l=%mpOKi8+d4^bCnuSDkj?v~R*T_O_C?39b(>csOHcosu z05zeoU0B1&z_yf7bS3s~fbnnM_&ST$Y4?qSY2+sd@FO+qc^#Yj$#n^UkQF+L^FeUDO8EMEOr z^e`_wGH?{@cz!W(E!*@~&A?#|&{%5#6n9syU03NZrg%cXn1xf&1zpk^8Rav zd&HNOlCBEWG46*i%ZjmaNg+bwet`=~9mZV|h7p%alMf;(FWk6C^C-wXSl)&lFD;=&=vafH=Vy7?tP#maIveDj#* z!!6HfLwm)kJjl?*|Ft#HjI%?3^VC+6OBSr{DcaHO(JBvezWPszNjickyUp!%YnRlP zTOKyB(KEIvusOC5|J7sw9pF_OVnWr&!DX$xHv_TX_csCun?Pc4n|?i}DcyLM66>Oo zdT!CY9VOI5Ck;OfyYhszRJwg}xLv}F5^26m{#!=gR~fe+Lxsc617X|FO=IKGz2bYr z8v}QRX}4xHI0DtAi6~>=MI4a|v@h|M|Iwfb)JHo`61T0g&#|3F+ITxdce>;=>ahNw zBq%K0ge2Vaz>_G5<&cy9FUch-KXu#EeRSdfy_?F@{k9%gb8=f+Aq=`6T}_O*W8Avy zy_4FHLMI`>$2ToTv-Du3!d&~%my0Qz`MmnyDM~Cj|9X^{#>FTht86Y6|BtggRVr$FJz>jLmB1KZI zNqUc2dpe#}+#$`J*}7el_{NbC_Ca5`0~W5gagoa%SgVA69G?8Y-}2%#f7;k6l;WUI z#VWxzjux{R9V!N2DWAX&)f7m|w%#4F(Y`EOasah)Rq@S-l@=?uW?cXQ6ImSbJggtF& zQh&j(3OZebuV{-lmYTHk^ML^AhIzKwMUir`P;~3;dBz!bEUuXaHMB~DitC7lw53Egs+q6AOnfOx9zyImGnZkf;zTI|`%OUE+ajxA2 z0FOf3|F+#MniA+Qu9~~!Xk%=SAOm7KGoJJia%?X8g{s?^z*t=XIFxb>g2=&`TBdqB zEI%9krzTaTY;{|vN6H%xGk|hqmL(VU*?{ zS5=TG_z3F6V}-`f$6JY$yPsAh%-~W&Of}#Zt+Zk1aL1RDBB>f<1~xZ0XAyPSRT=l4Va`3BMK77Ptvlh=N;hAnwf&(`5?w*GG7csC(2D&|octZpN|R?^ zxVAe*wW_TtyTR8^8$Nk2EiJ=}*-xH?z5vrk`D9Q<+UKha_b*Y-UK^FAYvvB=`uA%; z^*jG@!Av%O!C>r_UVRVZl+RxfuZR-A(hHEH_4LcKrd8WE!whn2S;fQ{6DG^a9Irzi z1=?dLqEg_Z?1a7}sF5$F_l~6M)kNI(47XxWSo}jCu)a7N16)i2bNj1!?*Y7bPXaG- zcP8L#CxEcz)|u-BU$T{2*p7&7LyRWKZt-}xM?ivbza4{gtwMXZgURI%J zC*iRbYbva*n|Y1&@TX!BnoVf<3C#1U*eAuUsf?Lmh#8EtLa5@i!Y$Me(lSD6|$gN+-o>|dTE9Lddicg^CyAviU zd0`LiHd=w-pk&xAR4%|XyW^xzSgQL<*+TDiTti*42s`*jqcRxr7M+ zBz4d6GWMZ;DN3VParM$GUV+{1m-LH^tK(dyMiWPkd=Jl!oUKDbfH78c4U5{ZVzA7q zyyM!Sc+rtp^g+qHJG?oz5jil-^6&I>a_s}>_ z(-_ry<)aTB&mHvPqAY4z7EMDM-4veX@WPDh|FM>I4UxeAop4?tHl~75a>uNDGqRG- z>jh%3#n;r{b69+sWS~ix&S}e<<3SD522b+Td0b~$o+>=Ye%g1@cPl|T5YrxR4U7cP zhh1v6Jcc|K+p&u@#cC45C~g&T30C}gt<8I`0p5|uT91~?35s!T7VwvDWiR*EM-IpM zp1WC4i%j;=sxSPw&jC=8*_GFM6U0MF7lgWoX2CDfZT^2ZiU)UG%lI zzXPN40EnkQ4y{Ui2u>L$f{2z^p5xa;8cXTHDYXu&{ls-bx9Y#s7l7g{M)ro&cM)CU0s79f8L~#ad5eU{I6YSn`zEB|2-NGZ`UOd zyv*mm{m_k6s509@P%S_*a=?CqVWZNR07WS<*_{mwIGkuZg&POVzLRrE&^4}cy^(v* zaxpRK*VQMA5e{G49A}Om!cc?D)}!8Y(r+mS6z#oi%O*7Ms{DxLK_$wh88qmRI$Nz5Mlp6Znw?22VSh--_jAw4vY;M`n4EUs5+R*_c zk$la&*-KGog8wz#1po_bjI`kT!NcdD}WR|qj zIflDorKwassjYn7`j49xW%o}HRwEe(TwQhJ~7v|_W-T(s2Y9?k`2U~?L}LY5!b`Ygq1_WGB0U?+4q z>k+55#50b3ya?uv_|lYTjOGG-Bu5C1C=YwJqhVBulLr6$Ed{NAFAjRyg!n*8X!mZ= zAHMbLvg_|(aB5sP7OnN$s5(Ns3aC_%*8ar4_W{QmnasRRymQiEDR=L4ZnjAja7`Oh zRbs}^9D5~TB1PjmV9^7|9yB|BXHj>1rS3x`&Tq?UX{4-x$-O9@J^_3`4q zT%f~CAb=YSHBQOC$yEJNIw!bWwQVp#$mZF20*_ei!Y(=&Bu_9zJeRH`9qhu0>{OCq zN3-{*-qLMCwQc$#wISWt^Kj9s2^?!exY(F>^Pq3SZds6EpOA6o50(TNBgG!eb|NaR zqG$7564Mw6#BL&l_%t(3vn$qj`7hZpYfW<)$?|ewO&USgL;KuqHJ5Liv71PT-)`Oq zUGRAy5rRp)ms7;WdG^n7+hjP)!ztIAv|rGEPYg2#cq=K|OE*aSY7jpZ2Y*Ncg)Atf zqzPz?;8-c{nXcaV?AAR2%=^^|NsKQ9_ajmRU@Kz}D4CSNEWkF*X=x4>2o z)Smi)I-ta{s#;x`=Q{yTYQ8sQGlqsVZVJ~)g%pA0+4_L5Yqg&oxBsdh0n$hHqYREL z6{Z4Y$6VeTkep4H`3?dZALvZmO4i~LhTV^Z@%cdTX8MmUplz|vML-238Pt#AWHcVN zw_IuhlJ`}Fo1O)frftKBZMhEf3%hvrHE&Lf4tCf%ICu3g&V2?3k{4eiv?g4u%4343 zyuoW?+25A;swLp9m9X;q%3eY$}@S0EbsuHbVb8x1vq+IC+fyyGeOBv9P%xgGmX24g(B~2p@G^H7tbX5KKJP(n(<6HHd zCVV$>X7_;vuA*3mKh>h3Z!m)$AL@tln{nB8pc)Zmtjcc!dr3YehU^QV0}M?}AA|PO z8fZoJ9T8={?TX}{BJK%Qz#QoN9H4?4IIigYM6|_1#}Jx|^!j^u?5fh(RW0q%j*0jy z{<3s6d2yXD!c>9IT1fJ3KP1jv`Z7FTsi#odL{vDF@DUS>F0JX-tA13;JSWejMMg;l zGi+PZE|ev$23V@Vb}&qXQSXILm=ojYcL7rolPBkcBEpxfwj z;!BtbP^Crh+U5y%xh!6Eu{7i`9GoBs$e_bzSE^2+*=CijA}jkwT_0UZgQUnV*#Kej zKw*7}w==xnULoVp^?f1c3VHndm!a*WX zH_GR^sy_!k?{*Lx0Xw_LR41#=ffNkb*GaS(-3r==^RnH5A|}p5?zkq>rqnEQkuI5W zK%AOSU;o|8thyu4VQx9#f?rHxR-^mojJWk6NAfJzMnU$hhvOQaPrh*SSiI^#o7<2y zE|!x5o2nIA^Jh{YXEdpi_E&MJm_DLVJe=83kzVRHVtkpbgocpBiv3CNCE2({G9@lQ zN=pX_W_|x%%euG`;1kFbz9T?86kvt?-MHzVSidwf@aJLJd#NI#`YzeBVeXn(K5sO- zD_LYBoDHE4qO#6QWo5lFHfZ8N23a zKiq*hE1dO~Y*Ys-exX>2IH?s)F)+?lG7PI{GbaKs^qQQ>(ov-Hp8ruUXQI313S7fK zMWU_ze9e~9PC%hk>u?X{dBAY=y?p#uw*55ea;_}DZK@ut{oK#(x_80>M303*QaRwB zXzmmA8vseSHC&}v=pW59;%7*gw~~)woA&9w(u1-P1zXd0WtQ_G2P{kn89T%80C~`i z>$07+hfNH|BnwT>Wrb~Aw?2HUwM(JwU7W9HY47ej=wBkDIbN!62}kap5AQ5Ij3MYe z9g*N=*KEl+rY_kCBf9IGanCI9-2Ng$C@dt)u)8-yY<9=xk~%xrx2eFbr5135hX`#* zi^>lw2iPx0BxumP6}C1H$tU88PND*_rJI?bV+uOOEe5FnKif`Y=)&y=4kFMsQ4@nJk4A{f{&!dpz5yhiy~H=nehH+Uib zSNjN=2dVL&JWg*!V8_ounl}3jqNXYeQr&EUun_Y*b`<>j5$&T!dz1&8{VfLQ^~B>E z7V>oy|F#$EyZoL=e`p<5=}LcN5hyJje4~`0q=r)Y;XCA}x4V4AW0quj^AW@L;3BHN zD^2A+A(r&6`H!VIB?;Uh!UJ~c5a|S>$zAKd;;nVJ;AgL2=HHq+HLI-ggEt!J2DT3dt(8vRb9#?qi$5Yih4qWnRo84M+m4hr-<4iCORxHeaeoUX88j+ zwr=y%vcZ3CF@Tu4_$X7PHn0z@k$3D-O-L`BCnGW=!rRQLjs&3{5R;dn!93aLTF|1g zQ;+{Hm%K5))RGl*&JdqpmQmti+m9+MH8qFLFe}jfpcEQnV>kC}ZrebVmD{l0sFP{j zwF$6PvgrHt{oiy~DYZH0un^izIkXif<7D>XeCMw2d$V_c_W+^SwMLN{l}?mZRjR25 z(fg3484c63&i5(lfS)k1YkjiPR`!ik95Qf7;77P9|B_IU3!5nxW(d9;2hOG__!sLX z*!5`i%Bl+V^d)xSw6)YQt7`j#6hSD(#IyEZ&;uP-sB4;A8*XE2#6T;1?yZr0@zBuIt zI4k_Mk#mm7tAz}8gid9LWw4tdu-R)^5-Hajo#(Zl+4Dke;uCB_N|;TdoxFYmsMiS- zz3Z7LE(*Two>hlHlvF=tt zGZQ=wF0gymF=zU$kXC6SCX|@~$r0X8#sNN>R6bkT$}Nl<4e zWeqI8w0CC2$mA^L>G!#8)q=ALp(&pgx9 zX@6x6nuhts+DCs>f61u;@RQj~7c2hzjWl3Utuo5)R_$T`9d}frhb)Lmq~iQW+=vE} z4||$F&uI9Ks235+If`M|xwD0`e?%B@+RC21ge~itDU0e|6bun|n`Zo3Bg=Tks=a8D z3A%=ng+Mm1wFS^QrJd41u4gR_JvN>b&m4%X+GunYW)DP&u~bEIis~Q^+aR1eXCVR# z0)8OsVkEDn$JTT8%RiNEQpwBnU{wyKZ-fCyNt(dwysqS$>0*7>gTbY?^Ko9~H;|Vx zCrY+Gq=F}Iw=|Jo+og(81K)nPhax0Of?V}7)SK4)I>)@6+#g=Cm8G~GQI!1h56_c6 z6>r0->7|iIbSLFxrHNGsC@DG~bgjDwjAAwCm{%fHWtbI>hdRH0>dWKkr6J7n){A=_ z`JPrmAhczRKC@$xrAPsfIJg$2>?R^nv6ZLmMy6_Vtfp;rduk%?ZXbnK%0+DVRH#l> z%TX7%&pwxTS@RDP;rI%d9Gp-vW~(Tk#70yZ2DIQy0j1?urXxOzK*6l|qtW~!? z#5M1`!dg5A_@IFx0qBGsta`-j* z5xo-LQV^sX6tcK)d8xiA&ZO@Q+}Pb^-GURv)PG*I!PO?aLmKj2!RqIou#rQ^Jv;=q z&hqIws9sB1KnO=c1POZzZ#Xi6PEoSQ$_Y-#Pr#KjohtxxSF?k`HZY=>Ha=v_uHu-p zOUBd5K6DagMgf+b5!nPP^EX`u#z127dD}Yb@&A6?tkwwZoHhZ_tK!15@0Dq0!<*)K z|NZs}G^_teYj^=%i1zt7*i?)rlf~6Qhux_V?H>l34oa!a!4^ARFL_!E6A*mKal-i+ zIKqe-i&(!|x!C&;+X3VYOInrw@0a5bjkp?DTTORohxBYKB>VP;0p+F7<%h={blQt= ztFy1YTm@x+rJ+!YeEGHx$%scqrR-DrDP6a6j?2=Z+TKX6L-yEf=(Ur3|DUG@0!+KE zy+qIy@tHy?~0 z4?xz)2{Jw@?_ON}F48JKt$+kQUC=o-V->wtc^@~4WK7r}9c8x)dt{+6|J;qxxHGT!prTHqIF-a;-o<6c^+nhJ+?o&;3WfWXGv)Kp_1I#UCLi)e3y4 zB2-N2@=F;=T)&f1^0_>iDK=8*raVwvjjOy3#lOeQjT*=T_afmuewk93kL53q!Da+L zr{eqJz+v4(pf1_3(oeh6M)xGgbTSi$_8ONP3m^zw5j=8a%4hjP&PlaIj`XnuWB}ed zHo2qGTZ{)A=&N9HU#9QbPTcc9{$f{_g)VF=iTzMLa9(JJdMjMfpPHiG30xj;Gqg4< zJWlVSh30|h+V!xTj5%4p7nBMwx^vx3)>t1>h^PW8H|rM;6EP8}hamE$E3I!TcP+Tv zcTS{NE^yGx7o*?Poac8~h){uBW7oF3^>|{Hx)N(?XT;#_lC*(IAFXu24ZguH5{Q-? z;4tV9)u81-24b!nhF&neAQS5YG+P;f7Dv0@V~;AWOWA$`PHVklPA$0#N;gB5#1g?K z#_PImfbakP)^*(Z^Ls?3+UWzZzclSm%x949M?g>cBgzKf20YZH*MpZ^U4<{+04TCC zmSnJR%R;1+yDK1N=;mH!39Jz zH{2J{)Lb7o+;BHdBQ-$9)WkAVvwTuSK-A2AAHc0L4K=ee69o4RY$mZqMO$dH3Ck&R zs`>K$2l(NB0rz#C=lgve{`xWmwlX%wK5iO`Mu4(O^9Tw(!?XnhB=6q3JCk<0a~ao4 zie0LN3hv-JyfSc5(e5CC$RGMin6>OE}(FL{5P` zQ&Ik!=YT14Q!pA{p32aVWas4_%b#2`l*LS_m};u@0ujCB=H(-hn_fZVcKZ_E7&|L= z>rgE?q@&@qkSR@(3`Z@wI@54W?Wiy6ugbTP;)qOk>3##7N9-p&+>G1Xot*itM?BWw zRXX7cE{<97<7n;P=?d=K`uRllP5^;YI{_rjz7wq;IEtFB4n7a4x~#=>S_l}>>MTnE zjYVlITNjs;QuB+7gGxcJTk%9&wRgJuW;2hpgU(RRDW#B23&Rk`jKF68P!Q7 z@aKk;Z&Y;bdI^S894iQhaF~GT=kz3?Xg4@~ z>K&u^_qL6g^~6Zm0~nU&30wbgt|r~cy_8DiuO;uX1#zUcF&;+bEKPllPiQ;!?|;5< zPS=KH(8T@dLT91uSCo0isPdtchtk2ORz1Cw>d(8uz8()LwYG;>R1mYInGm)^Dkb0g ztqL;Q{N$;hUR{jefo%pxGV76~X|5aSf_fltUvHiu-No`&*RUOxWoycj zICGHPd$|h6rHup`?DDUrlGDUR6i0l1cIh+!1^ex636~U*#13pb4Y0V?Q~sxWU@I|0 z-lI8DndIaGit+lI_^Z)AzOL&oOChK^ilHL8gz9_Rv2f|&L0zisB&Cg@R1P_dJD=_e zlAtPCJL@K9^a-%=dUq-6gg$dlq+I8u|gaJDDZ9~zxUm! z%ck(G!1-hPOe>irR|Fp?|Drun=`V`bkA4I8FRvM59;!xr7H3Ol-V<($$1gmN`S_VD zdocWGEUTQa z90<7a+*lm%T_E~dtOfGdW%ZIvXJzxB01W1do@gg9Wv3>1;Yxi6ZanJX&N`4fwtYG$ zH#RxWc&@`i5tr4qDA~AI6ozjRH5x1fK8eSA96~~BZ-KX%LltGLp$T9GY0MX1We>BN z@+EY??of=$bESsyxVkO|+o*JDn11;3*Q-xZg?ZP&@oBn4;|<#ve8<=&@FBXGKcTH1 z%}SSyg}xrYl~L8yQ9}&y+W}l_ROE>+&s+KiN*Fgyb8oUUSy~>IZz{5>F#hcK%xxqu z1K3=ObnIRrpy21OHIoGD5A?R@wqO;)dZT1y-Y3STenMaJ^Ms1=Na$?k5asf{zY2}Y z%JBF#6617c$w=Mqkswy$wOv!qo`3)IE1=vb5|*Z;^P4a{FPQ;+q(bYzaG)nZQ(41- z<%Lg(?p^-UP{f(XY~Rx} z?su~5@<^G$elk`>z=e*%Fg0~GztJ1N*SJA!r^!$tuyG$T>Q>~C3@n1FWYxb8chj;R zn+tZ%^Yi1EkHBtwPPwTJ8+HD)cMrB;SjX!PVKu7Xw|tQgb+SQ4RB=bLucUcG0Ar(0 z8iSY_pI~vUvZ>L;ykPfrD1~-A6wq4&__5J(>gwiYn(UZ#Qcb)@p}eJt$^8$&`7@f${VD5?Q|sD0 zhyN<)1QEvb%&zSaqBhcY$B&)0MrmR9yd%Ch*(%K=8VqDr(4&lc@;z6rnShdI7JMW1 znyu4?>HHh@2Y2UBOgXJ$Me+IHOn;o?S$?Uw!n%teEiaZseeU?|_6|I`c0iK*@a&-4 zu5Y++$4-9uPWL1g)6|Qf?X^SuCF-ilr_5cUp+ZQsFgptg^~dH9phGsOx5%i6+tjJs z@EHyM5edE~sgOn zG=8$FdF zI7M8{sC%?$-75F*1Dbv>IyZ<8ol|Pe0`M!!*d3*&5$^AOp_LgMGU3m& zCZ;zz=&u>0vc?~f5gVgZWRqDqE}?0XPVkUc3 zlKU2IiFfI`uCrU`DopoAhP}%asLD+^87t@hgsOhY}rrkEBIXrwj{m)_{_gWgXDDJ zI5;{{H%UMrUF>tx`br@OUNv#Ada6Sok~oFI9J^+_8zxS5W?r>gHcjQis%&dyAp6VL z&M5VYE5LgAdqFDM#)=D&t$tf741Pz!yRMIE`GwZa7mb91(2jO$Hn?bNCZ?-2YddTA zdsA=rzK?h@6T>u@rWle}0DE?8i}K^c3ESh5m7VkfTfaSj{QC;lQ}-hsUXMr$Nt^*a z9Vsf3lBJSWH=cMdfVGnwRpGDUFX;&**~m6URdxq+;v?>zl;JafIt&{bQXSy!)S?oO ztQ`i9JSIYLC@SMlM$P?MirmeeBbNfP1sn-PBpD|zpDtU zOC1aP`*9M{zR)mj=dYoq^bUu|Pn^p~VY}It6&0M4)mQo-s#R+D8<*nIS~?+9RzS>_ zL&qbXKYh&1URek%}dyi-DaLmg%28vuK zTSn#V{A2Q_pNq^wp-U8@Y615V3YiQ zeX(D$Jf6I$qqs#+nPR;{u%P6kK|k|K5Y&9G!WJku*>^`KJ!h#Y(If4cwhDEa*%k+m zhdo9{uJ*a^&Tej`ZBfx`Y1=&LYD0O{W-D;@xJuS<(a#^{j{u_5WkEG|(Ukwg0t5ns~ zvsG9Cdo;ZtH_XcosEL^_JgK4M0?a=Oa0&^kEYOO0_JFNT_X;)wM3C){Tyu>UoWzPr9YvGFzMaGaa}U ze~kL~MhG3&Vo4OXsBWOr9g@jEw~{;Ly!x@}hK^Jx#n_o!)yJu$6Cg{B`E6vZ)*0UH zHC|j_e7#lU!eS9>r^D6Y{m!tQ-I7Jc%iScE zdm3FQof!IQfJu{CoxbsMvuFaSMo_I0gx_4HtJR;e|4q(i+IZ%GQM+Va+a%WKZk)h5 zc=~(y2g85yPSqNvVZ%;+$!E(B3QBpfm_!F&WSZpHWksyRCmY(B z>!JB!&IteZDysEx%{o}LtSdnwGjyRWo(3whJJQj4xOzp&l+)%DTimlyD^R1+&(D0K$-e2> z)Id=|(e9}wpq*BNgjG9nY%b|YWqZX@4MN~;82^ElKE$7}8(RH;M~X3NSFXv2l*`Rs z$^1y}8S_VK#JAW5`^ob3>{t`ej+^%B;?&(4VT<<9=K#nCBqKtik z!^AL7i>t0aA1u$^5Mai@u|hE%cx)!UjqUxx0+ zn9km2%&Amp{4Zv0&-|0P)#r}dZnr|H>OkG7x9eT*^PV)n=Xz&c|MHGXm~Co?!*Stq zt+^IjE$NN(SvVP?D=Xp&WuL$?l-A}{vE?W;%NF^XScyKy#3@L-bFbe5_xGY-a4m8@ zxnBZ!HW0+#J8Pda>O2DfBlgTRVjJsgRvOHvE{nI3X=-Mu+jm8%9c?$mP}Qr=pqF+U z_L=>J;*w?yr9m}2(){&HI_kUAX(^NQ=q3#}%e!R(c1o#|-7%itT%1w?4|Iov6`Xat zeQe$$v^9jLORXBq_TOxz+S)mjt5%%rr?VW=!-zACTYx4|C-iI!b8C@Sw6R^3E3G8Z z>YFn28HdV_Jl>k{Di>5ypyyVcCE3(S>RD+|erHEPPmyTk$kY!nv;&iirA%F@{-nF_ z5dT}1F5p+FG&gF%UMLOq8QNG^p@3|P5S^phwAKU>ZQK^beYM%lEJk{D5-m6TymOR4 zff;P~;*#Rp>8q_efksX0qgA7J{)l98Oc7d%Qe@A&LK*H|Jb^F|gW6fxsRX%XqOz;~ zxaX%3ais&cx|;PB{zb=Oy!48x0`&<7nWL?BD71_S6F82u}8W(&b{j>w0Gba0{#HGTJ zuPn1kUn2pppXf5_cTW+J{9cyMLX~`7CfL~a110m30#Gat?bkR<_N9*;%{+I;ah_jo zgm=O(Ss0Zh$}yhtjC{M?kqi7UjJuL0avZ)tAoGH??r~s5pLg=Zt&T+EN4(DprYE2e zyYXfAYOG(&9Z(MM91Es0$Uee6U6tt#E%s~5ef-jm+%n=MbC~Ay=Qe*}2S~TinaIc* zM@nP7BRc$!2}d@_pm3wiFqmyK<=RGw>+Q(xAT)j8In<5c+OMJFOLUv0)8%Z{TV%uO zfFwz1JWo70^{lW+Lp9%cs0mTy6uoCS)+oXDoqs=3_NKpYj&+ya2(hjWk&D_eWNf*F zezm}5{*r2YJM98j8MD%}v#lkUK!3=~%F~S5Aiaw^!A}o$vi0w4%GnZMT29_Ed|mcR zb78XHhg#8K|3M#Fe!V6ujQhg(jN$6-kD0C?WyiAJAV&`xGG#&wJII8b8hONd5rKwV z{2vE|4Y&~2M4UgN-=a}yfv>3%N8D3iEs@4;ys?W$$_83+mcwJMg{7<0j?NH5zZdA#&M7_7-GRt_W`R+&Xyjz0 zzTIlai61IVkO&uEN#|Vi^xQe-iYVt;l#HR_P?i`OiM9{3Pc)<_+T#alPltz~S5qL9 zH@2icge93$=BY2jP?tIrr|TmSGT#;1I`AAgW*cK^*-gD_u;+)R@j6@wrg1o}U3*D$ zYr@S>*Zv6rnq#1xYUiRe<8o1FEL`6sQD6t>-T41F<3UWdvEYDuwx2kH4;Ke7atBBXgkMr?QgKyamzv_dg*W zdV5Z@ddeH&rg5}?q)`$+g8~xlcP)=C^kP{)HVCP)#^%JX_72guvkPoo5Sbx+Ub)Bg z>~Hcb=+(d7G3r)?KsDVbTpT0i4(~KXf^vrM$~_VB!>;eb1{EV4-Hdul^KZj{SZPt3 zh87T%+aIKsm|Hwfw@-P^nB9P#F0$;h;ke3K|J#N1@fp7GI2_SWxt&0zTu)+ZLeb+* zWn!O2+_{+eLnY-Bev|JuDj4S2@<&ku1)hva**Iq0S5hFn)(7Kvn3d!!GEyMzIMhY` zLRV)Gkg6M_7}J_XzRja+E1#@PRjo9xD-9dgOErFY5bjy0_YXMYLz7L@jzcl%?k&o| z!nO1VmCC%BRfDnAf$--{#~TOhLPOL^v!uS;8^VSWhmw@aCg-#0R>ij(|NiIy2xgIH zFR;3fQRQe{VNqq0z^}#k0v-np`QV7uc-4iatKaDozKvtK<{T!C_FdCrOix=nF_CA8 zoeV)DEzBzGS!&ibF@1yh0e>4Ti1Tb`8EU?}Xm*^Ai5e zD{wWejc3|vF+{1&yFCk2sZ?AjX!{1(Da`8e*09%-mF2noakEmRaVJ<@{s|HLvUEJE z4wI@pb(hAekdg1Si?v-CVR6=NuxX{X-eiMwyuB8s@m@lN=vMHMTDm zm!~cNGM|x!I1aSsIV^BR-UE6#*^UO8PQ`-tN^_Kr!l`(i=T4w!jW$?CnT9RfA%7xa zlSr3DL-fSxLzE6U#{k;YYNk4Lt|rnG)Vc-VQEEY7(zGW_W%0Pj*7G%=$8b}-kI=Vp02O^Q!!eOYe95!Dzqwf zdlP&D&dJ5pjg;v7`(yI$memye(2{0&Dad(3b*obH;E7h9&vCuX$G~$NPy0e&cYPaB zPhLDs0j~f)rB>$Mjn%j= z*F*)tPsm?GyAY@KeVWOpjMLJ%10<=rpHV~RQd5nGU*eu_8~M(7qA@pUH(mLwYU-kz zoPfM`;HEKLW_+KR*>x_tXdlrDc2})dKH)n@cg{N^Yn9O%KgBm-_Kz@AMUYCull`x( z;t`P*U$9}@H>*FYjQlseTYKZDvOiV^dmnR3Aw7R%E`f|4_q?%4rNDkV|DG6Rt%XZ2 z6NhF_j_d!{$lV!ACsZ&jgvBQtDrYCfQA^y1xz<;I5mWJDmDfF0oT&lwe^cG|5F2QQ zbr;F|?7Z{{10KMZ?XP`F_|;QeMknNQ6DxXdK0&_iMPK&R#oa!-M8p2g_Z*0^!HF- z-8wiFKY;&AxR+Xft18#sBoTO~o%RHzZ|#864%2V7;EQUZEMf9sxsmwX(}e{Q?N0$N zGxs*ykcy#)fn&qvX2U!sG}+PKV7PY)C2B-FrB)$Sp$39;e<|07WzHyZc3Pz}-f5cy zozYY(Nex2nN;7EJC;-J7C^XC-o+A+cq4lHNzMyl;^WXn`kHQUn?i6)^Ce8(k{CQrz zxF2@vzjCVVz`7Q6DpaYxDo4p_p~h3aZ;jUhOoVRx{=?yy&0y4txUypEs+TG~n=BQF z(3&JY@~4UwBj+A}pd8>9C8OaxT3)?AJ=2Et=;3{Bwg@jy`$4v?s{?+zUKHb)RBgjp3?B?*`vEUjD!J_6DVgTkz z{(2DS+H518WAIOE?^mD`u!?K12Nj+Ji%dBeDoR#3zI(Ze(QQ$6$MTFgLlp%U%Q~y^ zD6v0VkSJa|3;U#79c*GY#D;edBa09?vHPH)CQ(@X$^F#ENlNmB_QvGsWBBMSP;kWY zIA?)BA$OZ1`l+4bp{2z%U&}LVul0{?SK|FtcRSQMexP6F2WZz_>7~Y~5x#WpcxxXP z#v}i?={oxJp?J{H)j_mOZS6FjVS8NS2u$9~Jjs9Pp}Zh$8B~~{913pjrWlmWWbN6% zEY#}UK79e=FUk7!t8%l7*=08SqQNZ*8J%*)UgYkB$Nydc3VCMV)X@&ys1-0ElPz|V z%N5tg(5kc=l_RB&C=07y-|fIbd~?Xi4ref+p|aUC5dwukl(P57o#9_c-Dg1Q7CTM} zqc=2fe~iIFY2mK$3wU7+9szUVy9zGpFh5e7HLe*xIcxv%ma6;}Z!YC6bz@}VN;1r> zzq*a`m9)94rmuz0;PV=K^7XpI?RyEit2D|B)E|7}O)oyW%l1G5_+ShJKhSG$=})VA z>#z6@TcT%A3cfLB@m>)2)p1e029SA^0Trq8=Uf7_eqX4I(mqHRG=mmtV-SdtDCkiC zPR%zN`%Jzx9GD@&Ek4A2+rI$+u>x~&o8Dr@q!g_?>Ex-ao1d9 zf%f)b^K_W>u^rRniR>CY?$cg(QUMy!{@XI>rts*i&IzUq=w;@+V1#IE^5jE0SiHJB>;%YNsrdk6e`=%zp((zZJsNAf7 z#Jj9QRn2L^K*^ZRFI)N;H^|@3Z5!l=8kLHK^s{$5TrC3j47f(qk5smZSS){IRHh%z z94`(I#m`0TUVIE$%10V)nn-C$r3Lmdi~OWvJXc5hQyKRxIP#J$@@sCifIVJ>s0nbK zg|kPB^SPq&=?e3fG5bQN2BPHpfCqd^RrP&`!+J0KWMf2sIAbtG>defIi^GU=er{g` z>O@oDE|HAtbHBoR79B6tMrj&4zbDMLZeF*cJqLYAle$4|^lHw2b;}KMiYFTJ=d+1( zyP`uCkWh!5QlPoB#{VXC&?B&?V1PR$m@=pwzdg2hitf;4{7&xAL#(r;XUL%{30(L- z4P=(Io!uXL^Ga|`sfG&A_@6_@%iAp3ySIY*fw`YAoLMFN1=sLb4fdsYl|}{#+daD+ z_MO57CcyGcjD<^bmg2Lv!2E8e)hf4S(asZW_48>vygr*nTP_*7tjYInY-?Jt2N7xjC3+`jhSlG$~~rvhuu zmn_F;2rlI+>(W8;jbqT)Oa6na4v$2A7SX*la8o(2XJvoLH0 zWY5Uo9I##4+49a?IY&bDR{B7CMD;+5AbHo8OA! zuK0b^_=%a_=#H77c1n|h|BQh=F*a43G7&9EXW5E>lWva}2XM6{>l=R;i)w7375h^# z7(vPJ$h@f65n(s%;tV1m8XOnT4S{T4{mS#&dpc zNr$p;hCGXYb+nmMimEDfyVVc4LytY&9Ah<>YITDudvU=Y~q35tjV`4 z8nLm+#KZ%k%$GI<>)0Uj-dC6?iid*RVXXlih~gP;Nd{7ZML(k$x8FQ>OL5+?)-abx zb7S#3R4Pojj+=j1YV}uW*T{3k7b{G2SuDq7-~awW*VG=lh-onZHK5*hU5yP+cOkt} z0xp1>@2&&ATu{}-S6gGTmeIQ?Luiev=e%=%bK3fNoYFUrn{m(KZOu<4kJoM1d3mnt zZ7W(?qrV7`O|g+Vr@E(#Lv3OA3LwJAMAsPS7Uva^p6i>FjXrp(*_Gj2S|`koMl6k` zSNnr=rr#sylTX;YMv1Zf-yVVZ>CEw=c0C+KBVM^z^cbMBwXq{q)c4u{$V^G2A@fl zL)BCw3Z^N-y9?_c%5^n`wT^7Q&bygWNrBu>SOWrl<7_iXdk)q&HDRH_UaxFawCL#K3HvUFi#PlEg( zR@F@tNsA_;Zl9~6QP#EYEFaY^b!;lpQF5MjVdey6N^|n2PWg<_CE81O-&LVNC5s!G zrvUR#J2g!ubMp3C1k>Mvu46|Mxf%P+4Ua4vOc$%#VRQn6$Ud&>L859*+`cF(e5f*| z8lQatojkE~i@)ry^Aa$WX894co4_B5Z3D8&MqYl*n~e5K0AMmm*_oWMG)jDkNSypY z^p;{GZw3Ch_XH%YUn4y?O(#V@A1IzI`?F!BPmJ5h!i86R<0GG_5{bNUe;!Ma$2}4< zbh$QtHn-_9;KMJ(q@jBCka=QB9 zS@^)(S#IOys@?&(xga-5$>e5=v9T?ZUghTC&p9jrtAAWY%sPt*o&SJ@N}rboW=&};mYLm-^b zOXJDj?#%6RqiTH&xT`*8JaeTVVpm+!6v>ZkJ? zt?J&uZh^{tL3a&2n&0Y2af6HC6|;Oxtm$H>LLNd|JU0+`+PV2 zc;)N!WV~seu@A(1_(YEkX4^ZorKJ5-lk$iFE0uACkjb@^ab+xHpIV>6GdZWbA?Y7! ze}!)6wGUZW!EB&ZK@1n;g19N#Kla<|Ayp>ka9eoUF~#tglxJk|vLVN6x-EaBsXkv% zPkIE|e4H4L_Z26VR_4LeD?FP1!0mGPR!1GJS}g)RWHXM>Gl!@*5fQz&qYL#c3q$Es zS00XdB5+fm%5q&z*7B1r?4S+lf`U}aFrJF;6a06Kd1>QxS%SxmRy5l>In%xB5{;Ae zI%|p^hK4XT;pQ;w)mW`RWHVFEo?>hyqpqkHQWkM`lxFUEL(dsCZvA^3`?Q{7q9Dm- zUHwUW&f9=*1McIOQex7oI)VCU2=9aE_ufd>lnf;sYX^@0-tATXfm%Z_n>aN8OL?5| zv7xiiuyQy=-*bA#a3oT^+a1&8>*@ya(HBiXTvr2nTxm( zV-oSwa?aYROa8m;YF>tqc?VJ;#}I+t44&>8pR6kycm)J?D2h|t8GW$4nFBn=7 zj?xEI&*2wY2gkJ%(k{Ny`ar~zZl8C#&&+2Qd39ab7q4$#E3hZ;MvNH)D6fx;c2vg! zuZ%(|X7sQFhU(YKunYj4;PgOO(9g)txjiiW_df)2g2|~{%jVB6sc(0(a^zTtZvi7~ zSgeyZiK_0{>M9EDSWQog={c!2oe*2OnQsFU-0?jwvZ*{8zVS0J)Dl%AJzQB~^r_3_ z&ah+O5aI|Bniow3GJvJ6hH^AD5)WeK4py}&HOEqwQ72UmdDVfOotfm@MYcK$OKL-+ z&SeIS`0Kzw`a)ql9Hv0Y1M!CLoAjjj!7Y(l$tCafK_abp*@?1g7*{LW0--YqoWwLE5ld^R)88Xmy6kY>zw@4LP` zh`U)oU}dY)*d{|`BsahP-6?uskWuou;Ye%v!SA1c?AUK!jtjXhr+t)Cc{|a~~d+%&0cXhsr2a z7asqx)L2*Peqv*r_`MX5v@;kmM!>_&v@-LQE2d;E;a?|zf#CD-_xTk>uYdmo-bLa^ zoThmr9?;A7XbhnHJH0@9u}T-Dg@AohL9>o~&->FA8D&MtK!-68^&*d7%I`mEC@)m$ z2X0>#_qU1~cQ8r*@xk|q+qXbBX@GiVjBjdSE~!zM#J}2>;O*gYn?%Uuw$UiXXB39aMSM>rQXE?1pj_hNbLS}#riPD>jp+^p!Y3pZMg zjPHr7$sx#$Rw&p5pN+B-C-0uONdC6)PR;h0e{}inR%FyG;2WKD%J#NkC1QzOZJKY) zanJ$U36erfzNVMzs% zoQ(BF8w)dB-BPnCi$q#fO8?F7J)0co#Kwst=0Lwe`EUqs* z^Zk~%Zne_LieMIGQzgU#tA894Hr(dw$XL{Qx7~($thsA#4p@gH)O+f^gvVbhkBD1p zYF0`rS&m$xG!Wmp+?;;!dVfVUt6=EN4+l_Cv&xkq9bEa1z{h)7T=~FYKzh+d?KaiE z+K`jk)DZAV!3}l6>);j}ZnIkIohI$3E%n^bIT(1UB?#d#0ZeH_Yt+i^MHN9f7EaPf zVe=o#7=@NcXD*6H%!VYHS)omu5Tj>{s&H>z3JHGCFV<%}(D(KtFs|)nr6?zCMYT#T zsRT235jZEP3gT%dN`&-v(K>i@qnD|F?Y4 zBG2rj7P{JmreEaM4g-q}oYm~DxO^AnC$v?lhUgR2U@Qxk<-Qok_SD4;C(o1*P! z!{I&W{O#>b!Wm!I5hPsMy2uY^s1goCa$Df$x6CV@tD+WcJgnY!!2^!w_F~jKeIZzT zUghVmH`_M=RZfwtEhGJP?P!@*)UbXviQ$#vZ}C3tn6Q#*{}PueYudT49Mq^gZFaz4 z2W_%-)=+U7F%2113AWUpEOX?R(GwChrA8XHiahm_z&6Q1AIw2#6t?c4Cy0bSd&G>? zGxSvDInKw=2lt?r2D@h~Y^+e30LrL2<}}@vk*`g|7u|R(`y;nFAZgu7SB0(a8#^L7 z*8ID%hBw^0&kAVtW`kNwlp0akwwi|piho7?;pFc8*5?)3;$7UCx(qYo6G#vg z_Yx`zJy+jjB25SUE=$N8@1le6&iDur$$|-u8p2F}`;KsdIbkHpBnQ>Lm#1?iq!r5@ zVgQ{|Q?pgorU_1-r6w9!GsMW3FxlpKuDMEQHmz*td*{@FDHlV*mG;UeH-x7R+Jhj) zY-ZCUCEu204MfgWS)jI@=K=n_Qvn*klJrE|Y7$#MFpR-0G%CVL#*W$Pj81_zaD zW>C)$^;PyursqhZ#$DFXdeBZo4sw2D7ei>Nla2kgz2_d!R&L+W2EWBnTu$90?4Ile ztXY<$@yDZ{nnyj@Q&&(r~CbJbR|;o@PwGb|EIlDVQfX8z<{@ z95;uX9`>%VnXt(>^J@Sah0D6)a}HM!YjKovVbyD(B;UKKsd3qvGf}_ikGQBXeHwn` z@Dug~Wq>$AV=KJ0&9lK3@;9EBTnB8W7-`GP{n`#ik_{bTN3{G*uP7}$X~rs=Iu9H! zttC1BaQsXX&kc{6mHb87kWrmmRL2bUeDB+ej*9-5yqJcZHEFZA_``GqH7vsy-CE8! zy>g3yJ12XoyQ0LOLDVQ&vYd&<;pwSG^9+6ta?Zz5oDxN)Z(JQ5rg1Vkv!lBJGl5U#`^_1A~Q26VE1&bEX?AF58l+dimUN{_BT`O zQHB#=V}`y{i9jwjI_p8E#K$Ug;4ayw@M&^U*Vg`9r&M=bt^=-feGq9wm21#V=6>8I z)^<@I29Tc$%_a%R77+`Vz$o2vfBr8?i<#C8VA}cV_Ds)#?&*VlFGP;kqp}kO+SAsh zX3gO6%#h05sap2|xY9dkq97OL-mZ9WOFy!AXb0K2L5l+6%ds7eEfutOu|B_)7baYAE^b9y(Fm z(cy?%k=4P9KR2&4>YkLXtEx)IW~ZCya;Buj4+e~4mnX_erIU9G#@qzLGXA>*XB0gh zc2Lml$}TA$JRC#x}hwu7DVDQmUBWD^LwQOx^C!)*66Z9tT3@+wttRUX## z_Xbghy(M6}gNKNa*``~N!UVK7L6))cC(B&Lp)fOYg0JoMd;goIaDFNW1_nu!@R@!h zhUIK3J~&|N9;hHyX%OaKdny9_)`AcNdp$NXEJ@bj7Rx}TV5)+#bKzM9rv)SCwWx1qPxC}c0Fo{`bxEx1!^|M_)_ zI7g*RGYjDTY5Lp&b5E@e?~YYNX1+(NDC*4Tqjv&^MgOhB`B{ZuOttr1&P$$?+Yvb# z-Pdh%i@#`yZ&4S1PBGSM^7_lK~@O z2$Y6o#i4l~?PH!+J`W|(YU^Dl`L(7RR}R)RZ{~;MD392LTU#O4)#Vd#f2O`HaKteD z!}Avux46k1W<2sYkV%6hcLesAU*d9;>VdZ;{IPh)Z_=o(y5~P0{c;%|9zKxzSlM`p zF|?&0AbjQ$3Q*pc7Jq0yGEDa}Wus-zVP?syznfh;)C8Aj0?T-P9DYj~6%4-SM3%AQ zo-%At{WNwfsRz_$oUs@^KW7>l=<7a6o6ywqQGcE$=%t_97;WFk#|nE$t5$n%dF z6JD(?gj$qzaIZss0G8%9wtDKv=;g*%#%_)jL0zJ9{3dfOmnN=O4;kiM;u+Pj)GNKa zoZJwdzL{yFuNG4B)IcY?|l{r%dFf!~OtgTlw`%UQbq@yYWM+;l4CoZml8KR*v)D8>rQ^NtjrW6-k zHGeD=KUlVOK3fV3%-mt(c2ge4KbT=9Wy-#i9FVsG)DOf;%<&XI> z>hPT*<}KS7x6CA$au8$eCU>aTc=XqMJkgi(f;l-j^h+qzhym($1yR!^pJ-~vKR@?T zlQC`Vv$e*$z`7clJ&>XO=JMEGT1DNxbKoDkK;x@_*Z8RTv@x0L;Y1t7&eE%$b)u(C zgF0EAwt4ICDP!$70+kn_51ZgO2b*_tR-7w{wn@qjMw07iu`O{LbX+R&Hl^y6zlzzD zZ`GgFX>57kVELD}9TuAK=^*&2>)};U?G`KYRn#yzd>osIgIA zlpI~flX0$f-^2$TA0j(ni$=Pdfk?+Y)!A^=JTlERx?w&ukl^c?bDry~=Xj5>q;_x& zH9H!n-sx|7P4Ub|4dDLL?3Z|jRfRPd#)3JerXGA~iD>xHo0U8+8a9jR4JkMOY2KhF zD=aN)xMa$3hq-wOaRKQ7@B6eL&p;6+Q%};1gGbD!-GQ$9aD_n}Fa@% zfveTZ5SB5I%M8S)hbldpCpYPjekj2dZ*=keL^+ktWxam+0EXyuI~lf89mE)(?gOxiu#!8uuM zm1ISNr#o3&Z72AGgo4;>sl+uD3G1s@zg^_OCR~sk2;@jMDNaY*y`{xkI*p_@arJc%F^A%q#i^$&h zl=;(p%=;FOnTC3zIb=AJPaMJyC!z3JzVyqIG@=nAIW$Luj4g8^pq&!+W@&&ogw-n= z6K*2G2!rsQL_lrxX6L3d^QO?A1D41Y(B>A6@EYjm$=qj;)>wvYGdHLo8~Rqbz|hnw`*N9P(rz%H~o;(PAe&`YzbxP?4REzyL)4NJhjcbD#+(& ziqZ*pxpPOemi5w#irlgMzYZv$HjVuEKkr*fVM&VP#l--g>t@a>xHlNrNs3gd*ax(9 zj2x}inJ*+;x+ZArcDSsew9x$ zi6X3?BFrcCWZAn6jrFMPvFqb=M)?Ms^aYJIUnCYuNk^i|I`xWsW)NiJ$UCD z7{9wj=EhL-S^wa3nOu6>%U}DCj>UZVEv<06^CSNjryWLLbe6zfr5p>HY=dY=T(|39 z>3Y4S0U}+1N;>)4CuVD+P9zshf#Y zxX)=JhkiHM$pnZDh1QKSIqxu-*FoMCi}Ch|-H~`fj07cF)VdUSwh*_cL2vfErq@Js zP|%<4M76oLd*q*(Al~b6UN^*JR+C9u5!fh8&zpMf5XITiv)eC=#+3{^st$x+`+qdO zdpy(q|3B{P>ac~&m~7}8TMS{$v4g|M%pr!TD|0NH!$gs!A$()l96}BoN|((#l4FI2 z*qkXN#8omyPSu=+^n3Nb-F|<#-FDk%ujlLad^{hI`{VvN1;Esm}ooOG=JK|HrtVomG!^>zT$8_cgvN6f8yMMS{z9GXZB+v&^Nc{n0IAc zkmke4(DSzcy@Bnu=0dGQ6S+62t_`=eE>7#2gmM(@fEFPOsnt3%DILBSZTQ-lgQ!X= znN_uv-h-Rt%HDyYvzVbYHCp$s{ zrVVC!t5JfnkB8dm8z~=QW?1DL8Zc0dRuMMcE+O&6G$Z4Ck-<`lLIZwUQM45OATUm} zcI+zcT+}h63uNr(wf3n=-pNgDM9bcuV^(H`kg6VEJtN``jeb4FGs$h!)w{iSr9Thc z`O*nKQq4$DQzMJ1H$JcO;(t84a;4LDKSBIGDfDW9@Zi6K&Qe95Q+Q6bOh`tgAk%H> z9{;fRzW(la)8r?2GMX9U${TJ#Zu`N$yJ7j-(-S8}itMCEtd(SQy(DGmt9Qj_N3>Q0 zUutHEzrdBDH%vrBP&j8w=zye`#;E8%s>!JPCyCu!PwP)jmf8Yl{TTf7s%qNJl85g3 z51-tLV7%46Wu%ewtj+oc+C(Em5$kaI^P;CJXV98&)CdyPV(W;s|@>cKmN$c{%VNmg9%ToSMT#y8*LlAe>3U~7HVHs zNjkErd)9&xWdM3~%l@*tj2HT&wXGDTS-6Qk26yv~GB(%%MVvZGF0Q_i%fWt0Yn)=; z2)zzh9Lv3A<=iQ}DK6&X0y zJ@s***5HreOn@NcMc$KUGgFLvrdZhhMsCfKo3GY&4rRp8@(kH5?W3dCWAV&ns9`ia zS`le`vNsx&p6i}*#i0|IaI7-x9b@QD9_J8m;_5-a@Q!yGdFN|GW3--X7DG)sOp`kU zfxK%Sm}2YXCJ${MCgwtCYO>O`_C4$9Nv>_y7Fp5DY-XMYC$X25kcRwEb(q*4W$%aH z;*aLD0OEg&|7niF_x9UBZ$#3%kPhSzFlCj=M_1Y|i~k)@O^K*)Q0|Ts{S>t>71Y=3 z;1JJ|ZHz~qG1^9(UK(JlE3Q(vcJ(h0UXeOWG6aj$X6FVPwl;C_G;6Iws8UpTJ&(*x zapg&i9lfnp+(B&t`nRsu6RwVX z-N_5^nqZq!6XCI&-&? z6er0XBXlTUJ!c?own*-saGzh*b4|??^m7M46nTu{YVv2V2YM<;2DNLZpA9gn$G!Tu z%Syf}D`#?wwL~E;a_Jh2P-s6?f!*m(KdXZiXF^F)szV%_VmnHh^k*6J=KlXk0XBMe z<*qWTpfPV_?`h@F2ZEPpPsh1zK3HI~Cn`EGhcc<3+YVQ+<} z20)|0@Z71Tn$(+ESi0IROGFrPX>|4gK#ANR{Z5Y8SGuK`jDH+J`>WGR^1v?O1;`}do~|K#Ac2L{@o>r|(FNHUpBxt&qSk$WKa z!81J@9?>F62L+G{gcXLsciyiqS4-_N)yS1l^)d_>d zzo$^)E?|H65uhdw= zss~O{sLyiQLk*jIX&iS0s&HHT{A=6MRx_FN2Ol^UD%md*JaD1x%chexClf!1{J}jh zz&?eT%k1qixLuPGg%+C>4tT(a8JzA?{r{5no$_X`x0WwGvuRi8%}Y+nC_-GA5KP!4 zv|h382xEXj}Wd{;6N4G%3-eFTsvbRPv0+N;u%~$mwzA4iJ$?*5>7^ycV z@iXPfvw=ga7U%gvg1$Wbwpdi)lz~D z{*|RK;POciwlzBFwMl9Ne@s|+q!sLc|42~l>6$1{la+SSBvr)oJpsMnVO<)&?rPR* zFcPDaWpnk`8yUM!3c(Md0erMsb&>g2U;AJ_G5C>o$Tm zPq$S9p>=70?Ul%whH^n0F@rX&>!%22;UF|5$hnZU_UZQvT(E=p`HperkzBjMCmO^)) z2TtK!Im@0}9~Lx&G-7KxOAeHjbDH#7MT2SCn+Al}dEV|nAu;dGut+u}+nV%{o^JPe z7&CFjv5<{c@I9TcL_2~6(+QT{js-qr25U6oMIhQ-fPr^(5Zq?cZC9@1-I$HgCQ*}e zvdAx-c0btFAa{@kx$+r|OPH4o~$vmB6 zK9;eoSR|j()~E4_><wOR32AZb3(aqh;chV@1+~l7$#2$ceP7dy53O4US!pIqL{EK<0g;Y z#$b2c2G~l|i12UsYoy`~nj!i6xy4(wS(DeuH53eANA(dWPe7t+NK@Y0;1pfV!r?U> zJ)2Z;LLKg7504NR2RBj8LS&eHlZ-vEQN8``?PIgzs*$hrgv8J6CT;DptSB>HEZs_X zfa$P6#*B)6-0zwO%%B!rfWoWi*r|YukGQj*m8>sNN$HIbA|qX2m8)|;nUSU}D-t+R zdMaRDwy`_QZrrDF16bDZPgAt#_c8)v-M|9~N`Bj`u zdw4VC95|m|lgcHLVhFl&a-S-oo^I) z`BT`V>gCAqpTeTVtdg{?qT34>v(0tBi$=Ic)ciZ-uxYp$7akYFa{oC1t!I4xlLhSV*`Egt~@c9UDHfhxg z^$qyXi^RL`4G@B(y%VbkYf#zh8p-8bYc?}8c&7V@+VJBGQ7_BO)McDalc?nAxR41Z zcQETdQzo|POimLN(&*8F(G+)d^!P61ysW_~xFPq~g*m2jzD9e?H@e0vtcFls_B9eW zp$*)g-Vc?+PMe)aGV(9Er2&3~5x4w&rhA%>Q0I|@>D8F;M>dS=V{w$)jmKF=R8ObV z+z(%|CiV3%-?zjH9o%N7XFJP;V99e9^d;=Rk^^aO)iQc|(%&ZfrDA+wXJUEHMwi#i z+em{`jc%g3y@cwEo9%;UJF*}(BU;VvPI$eu3c@i>pSei&{g(W`s;RY6kX+aQodh45 zwO*vGoIBGRk%nDKuRv6+^4w;oW`*57);9v)KR1bpa5{Ia_^jJh-X*KNFtTzXXSi8% z|N0ZDDJd>S1;s-)-Sd&_x6!hFv7uf0LC>mt?@LOGcw)ow@k|zY1|_1`b7I}!-m8(8 zQ!#QW4eQolPPb#G(R8$wjhp5PTumBwDzDNs%y>&j&&Zd_opbOWoLTVmOK7z)eQA2@ zpc}A<4&Lr5OQ**?9MC4-gL%Mgzpt0_sFm(qKs(TS3?Q`jamqci@+`$6UZF+%L-~7i zNd6AkE#9S&P6?BFr2B0xAg`{TD?r+@Y@Ld~afc1^H~|4#4jL8wk-P?Oe}FbrD`FLR z!;KlZbS1pfp3nrm&f~T#_hXXzV@-3ej_jBwC1G`QaeCQgkwr=}Ed{m0il+4d4}}xg zA0P5=3!x;31nD3%Lqp^k3MS?nN5I#g8HF~)^bhU8&P02JUe0wsP?SFG*fcUVl_s6{ zqSWziBO-$g-+HRtHa{8Kz{R{U3X>LP&aQDa>o}j}ft!RPd`C0it=LZfx05cU(_l)? z%yIF@nWmr`a8NZ*QmEZc)9y2o|TnOIuRpV2w@Z}Yw`UYxrVRn&8iDnw0j$*uDr}|{(g)FI2 zTcyFfrnEY)vevO)JUW|Bb@;BIO~=w{!pi;ktBRy`vu@{a)kXk|RxH9LVWNPp|n#1jcHS&zFjtCi2*kD~A3vPHUKF zo6IxOu_#FyM`lGkhOy@T-XeX}@tN{?7EC_OQRtZF#+0x3HZgyU&>ZtP{ZXmrt7FmoVuHw4`y(%eAQfy`*4bBB$u3nR7NL!8@BuI7M4Pyfq z&$ld@xjl%f;|2^e<+)l{9Y<4-P2(YP#mF~E67%hF>YFa8zTRPV+`O7S|MHB@nzbAw2byQ$pqxbs{ z%-Hk!Szy54@)hB=08<}O;WgrS1Hp_f7Y2kGhzsNd{4*Q4_yQvx^_0{n8>ZlNXJ2LA zo|VmWDGzQ4B?n&E@OSrLa%9hY@sKl%za#*S2#ECKse(KLcP@!Y>m6+{OU>Aaiy?vXoaH#E$%40*!iK%N@VWlBG7%^wMJDmBE0H)`R3Nm#e{ z^8+SCJlC`yx0T{7t`@#WPk+LS8MwugJ5JzLnu^R{Uvy{<;55Ujcb^?dzmCZ9oI!6$oTC~BF8(^ zuUTL@H5Y>!jqCvo;al&)-PF{PHS%EQ%!aw5?b7Py`LRzmOqyNg z;ZMR59RgiMUdoBMQxKn8-HShT%%DyEP;l_RcU{hmRMGxAd&g?jb=PT;r1Wk`k#CO= z0>j8_G#F!b;X=S=^VH}#Y1v#bGD|OT)kjZ<+^4j_J=Q-6&U!qY|7ZJ^OFR3&(#_wsH{)lpah+JyJ7A-{%G3^IS*fc*W8H6M||l4*vMcc2QD6M04i0?z>A zXj{F%mjg?Rb{@_;QAvg+L1Fh=^*XQYwRqk*w))_G9DhTG-x_Il-}kjvB!2G6A((vq zip}rSnu=c~x6j&WMK%H|fw1MqJiFxJRy%SC?R|UFBEiff*RG- zj8M8rtX-bB+wT6xJl2Y#ecU%1TJ@L2$z2E0{4WW&&Lj1grA&;mcB8*-gm%Aj``}c5 z)B{d{Y*cZKE>dKR$`5mJHDK=d@oMi(`mep913Ml|7d44|;NDmGfzxk2g}Wz37n9=BC&?kVo@Z0B2ARZS7pM<+x^ip(cc>sdav zkV#M9)i|X$^`~C6{%muZ#YyAPR^`|)fBxlu>F4)Hlr_%zHUhF#8bVtLgA~%~^mKb8 z!fRXH^?p5(=OD9Y9Wc89u>EZoT{MfEyfi1WJWY#y<{Ze;d0JT(K!z$J&XXHCxB&I=7~h@XC}&YYm> z+<@1f;;cMnN`KwkAa{F~EJ#)z`1mJzdZ7Ly4QNHbHx6o>^1{od`@pujO6=gZCe^Wv zAto(_ItC=D-3Qy{<+}69GT2al_dMXmJ$_nCGpsBuAv;sQtVV51< zxQ6VB^46KnQ&=SN`9~+mE$AM}jb0Vdo|tD(JYuYTe(ua=+$(Jnd2&>i#=t+&o<|f0 zqFKcsJOy%)mzSBIt`|ZZvB1tm^{f*@W2|(nhuU}sr3Q3#0ftF29_&tPLy>e)D3lTy zsu_I|3e|!_h#q3?nNf$&)#?| zXc>fc7kLsebR%QV_@%kaA{|J1dJ z|Kou}N6?D3-IV_TB_4e&Cl5kv!Unh&Gg2ZpA&Hc4L8p= z5{QO0P8!ou72{+w)No)Ul&s9d5joWt_Jy9Yw<3$*SFZx%KO8s%U{e!M{R#AH1E(ER zM*!dr(BTBI*IEwe&bj@PkXWNQOzSwIpLpx-LGG{F8P0kir__2J$|#MjmYy$6*371- zOPi_xXq`hwVC>cTa!2Mv4DIzszGZ^r8HFjyjbuR^MtQ8-vKO*uM7Uulr!w4)7vS6Slk$xF1sy4156x_FHW+*mgAyYr5QJK=Nx|24D16=kPyMl4#gFsbEI* zK-EAG7Chu}452tHF9z5QtKIb_gvt$-c@kMku#>yY3%A+iAOT1NwFL}{L6@;`|5JNg zt8xJjVioD5XhQ3w+OrL$2{=DCgoZ%8c$`nZGts_@JULz=xmVUEl_P*JO%lw&uWi2I z1?8TeO~pr(l;HG?SkqleUBA*&HC+6oAODViA^Gpjl88rP$cL-FUtl-f-Y{D>AkQ1l=}gZMLZ^8MVrfvyA4-kK;k9hyQPKJ`7Lj@ zWN$B#>>YphVVk|U_Usl}1K)$+$>lb$JE#5gzpZDR0r=L9>6qrN)7RJhqQK1JF*?mn zv@2-L0omzSb;Ppq-#y|tuncMNB`|~eu@vNh%#?YL0~tR!M($p0ROq#*opy15VhtFD zNdh20KWq@)e!KQ9H8s-S#&t?4^a|jv?|--gQr`mF%=Tk~NEm4UNW}ne=ewTn;<#3% z^b0loi zcl;lrT>`sAv&RcF-Gqzn^2 z>+NZ8m)t|;Y^)Zkob5aoQi=jPnjASI5F8(Yu(B%H2v~JZuBqvx%=rmzOu83MXC-yi z!9euY7ojxwkZa@RIu!`jg96Oegx`_dkTggL2%Sw+il*F^9BO0KOf`LUh|)>8NL)T(|Q;xywm!a5P>cA6P1_PPFLJ- zMzyKFl|3!)Fj@wSj{s!z{8MN$1CRJY>!lwFcmSsToLO|3ZwJ z&t=Vt4ATiFPJlW#pD2sm+o&Y;tLd1*q&LoXr2SFH4f~pwr2|9E7iq3sO8g7}IFB*A)thz5%>%M*jh0*$1)B+Q?Mz3;9Z_gFdu* zH3eb`27^AQJRcWX&Q7>lUER_n@P1wR`ft_xt;+1s0 z8f73GsrPC$h?~;m*5r%M2zjQ{gr+;F{afJ4U-eh*Xy;eRxFbQ06S_->%hVTSH>pnV zHjDq^DA|=~T~(1H5NtYCtLoMYQc?&66T`ymHhEbtw$c7Z=)|Pool2Q2!T}Uk;FUg_O{ED$?>{ za#2{-rCBG#0UV^Jm}lH-u;oE5(Vr*}=zodcwBvAE!qkCoeZ`jU3KuVHT4 zG%5hRwR?K9^8BPY6&}QNDu9oUOX)WKOx-iZz*H1&JgZ%5D+v35rYLKlC@8GlSD3#4Ar_6|Vul^6} zvhM+$7@{9P{ZpwlbQ``M*zLz=K&`>k=KpRfXs)@GR__{fcEq&dr=NYaBAbi=1@Ft) zM1V0JofZ95{jn=oV}du93EM1F2>Xs?Urj(cmUoY6rS9)+_YATRG>d;O3z4PV~Ko&N^Kw8E&4nb^QIN@8XtrNomlBZwfFSK553J9P&!Q`#^ zp$#h0CGo6ktTBrwH!gb#yFc}#W36+}{0L$o5eY8b)aJ)I0h3fruRn-+F4Fh@+Jgh?O4ygjb>u82gVv7| z`%RIihmFO>JOU4TGj6f|W-0r2X!bz+VE%>9><_S(!d(TukA?_wkvhJLW{pSuMgxx{ z>x@%k%T#mFNJS8?#yI&9eH(^T9y7y64$eg-)MUB^U#JGtQ-I1XV~a7D!^r+g1+_d6 zO3Irz0OK_>6%!-II3a z!T?f5i?piK21)YKf>1)hflzxKDH!4T`FA9T(>XX3Fg^QA!tkd~gD)O>KDiS@AtUe> zcc8k=^j{L`x|uvMD*p8eSF8vxDsUVW{F0c!x2iyhq+WnLb`_&Ea2p{%Cc6C?QCN$$ z$DS<%B`OihgH1#8EW9wwZW#28hCJc9fJbCKmBRO`h(gvFpdvHuk0kiO=pMQa`9jbi zH*R=bI>JmIb{uJhIq;RtZp}OF{E~QkW7w>6aVxv(4Xe;!iQkpVbQ^|=anNVALeW#^ z@JhftrsvsGQxl^EU%!?m^Oj8>=9n=i;7k%|L<$d><06Kv~@H>}Ci{Z_2I8hQx& zT!g&d{OH{~#^9P`Y0K+cFdYRIdux>W`=i}7&Oo+Dw8B$T$M7k2Es59l9Nboz`SY)m zXBqccNfsGo>o;@%k6jW+`k2TMr|q~btu*rOt(~wXul1I8+y5E4l^OQ)`cKa~tQ3_> zCTTZFhn*ZV<=~5O@+(wl!1wdt0rrdHkqe?5v+=@oF7jGM{_rI`j*6Wk4T%N6^azt` z3WKCJl&PFY@vS}Lfr((=G1yOoa+)+$fJl_322;U3f1sP@xz(1l7-=&1O*8lEFe7IaV2C*ePg@0BDjo zedSMA#nt*{U9vH^PNt`yA8`?iN<}665Fc`XhxPpZktUA8b;$iMJ^4%5UY8Z_A+iFF zph-vtG-~)Mz^MU*zJCnvy1KpKzsc1k1!b-9I^0C&%oJ0`V+ip*`0a#mX0U?NaOO4k z%E)RCUWaFOAT>2zpgX&JZ|R^=Bfqx2cRq&wU4zudS7H~VQ?bXc@1oJE2G}h9_$(dT zk8uDv4Muk0z_Ouh^mJ(8OF5|0%V!3}L@#yQ+pdq&RHMana|A0}U zb;U6amFY*KG(H@Q7>i>-)?`CjG!@6*UU7_$Inu~~E|D*2!^hqS5pDPgNW3UZU^p9* zP?__{1_e>iZz=S|2+TiDxt<^QE=`SdW^@S;`@BBj~ChTS&XYlE*gX#HgX+4_knwmWB(OI(>#mq8v z?NiabVEbInPQOY~bBd0+qM}Khq3o1dD~9gGybVem@vFW^T$QWbNKTZzPw6fkSf-gc zg-sF(7fW@mO+QZt@yyKN14#jB3J&UzyV7K%x2mxLkiPpWPZ#-50CH(Ui)jPsl_N)H zQ4qR4AToyC-Fxd2^e^Y?wen08)PZy)Z9X{$0IAyAn68Iheyjzp(cKF=I2WFV)|DgL zC)(q1VCE+J`-h@INU?Jl4r<}4g+~Q!ncSw`4Lb-o>`GWo9NTH@q~{d{=1l@;FavCoH&jXP{mKH4M{< zCc}bW+iIY8^tjVUCf+RA4e9gfo>I;vYeZ7GM(?p-61{-jhCHgi7sY{htR&29=E%67 zRGOs$j&)a8mn|NLG62;fb!UGJ@8ioQ+?>o?bnfv6x*gn@wNAJh$W)Q6?Qg@RyBIXJ zsl{3zV7<6|hPobu-3==oP4xdTlbLx3{hwUV?xE{VrikRHv|WZ>qd3BH%gb#JzwS6l z3wJgc{w2{UpHi3P6MonAx|I$WWVDX&?cI@Ya=q9&Sb*F&dc|&#QQIE-f_>cj3-nRI zvfa~Qwwb9y2#>E|8SP1k}G1Wnp5 z&~f!Fl{;<#Jr&l zjY^W()fDt?ITu;>blExqDaC20$+=HJ#O#{_O>gqjqmz!0DD=vxw znfp85Dl2hr3a-SxD5Dn^dg%ikpU2#Os<~4F`RZ0MPoN>P-q6i`d~wSn*S%}Qo}O@1 zB-)LxL%a2ozxjj(0V>%?Cd_FuwuVFsl+Dfnlr@+)R<0?~Wv!Csn6K)#pCBGKRW@Er z!2RIBGJx{>zSv!3zfX5i7fMLb`*~b*f4O0Mv(l^sQc0C_Y+0*s2jxJFw zUiu{=O6-~2{UsqkA5-D`rf<_i~VL2b@HIup*0oPJk$mN?)O|t zo;lMiJe*Q5KlO3L63i$==L7~@YWti{5}=O@_K_}0aK#rw@u?vm+u#S?wh9%0+r@8K3OYbsnX;wtma~i!3cIzY`3fN zayt|NzF}_CiEQQ}dG1ln8Ra0FI)jn+`c#4Q{%Fe`r5otL+NZMFz%H7-E?}^5fW;%& zI?<3GzYQ|lO8WBB!TAh(hjego>)xs#kd7@CcxWuocbgs8oyWUoPFy8<;R$Nyx^Xa5 znHmxhz0J%l9~7-ymd0x}{*<)UBeuWTRatY$)kuC+kcLJ&Yj-CYETMjBx2fFreHs4xjwLnNpc_=II^izgUa?ZxBq5Q0;|Tk8*b z*8P|~PD1kT^(S9r2A`&ees}MfsG9d2`?r8lElMvdqj3XkWz z={Ts@kYl4_ETW29q!!zzpn!lc?Ke2Ayjx;fNL>5GNR^FXz5A&QU#6lYyMAue%7WBW z%mYtfedRx#;8cF!G);VOIcvF%6bJ^Q1jzl_RWuZwWhR?Vu-h1QFcn^T?dzM@q*G)% zK-ax@X1F>1U1Lji#lO!tXu1e5K3^P^DdPsz9qmg6TE_zo2m9X4onMlXq6XzI`p}*; zTSL1!Vsdw@@Nr9_TW02hO^TV@Oy)YF@`TDUJQ75&26IPd){JQ#f?3wb$&l*vZ5?%F zFN0mY@9ffdkeAiBQh?akwTRc)E(AR7-pSn$`M)GayH>GJWsWtL`}hk{3|AzQva%r+ z#A#i3+y+~I#$ZCAnjdYfzlAzpW6y2>=UC7|y&?RT{qAnh(sgq$!G}nTt^Y=tFbD6- zx7GSYPo8ngviPOmT>6II+vSPsUlPxMNo*eYM(kv-0}jaKIHbtx$P`+~B3i=#esKF~+AJ0tT|sWdh9 z$L9+_4K&S$Mw8(KK;>1yPnk^xD*VM{&#?);%_^~&d^o}GCKU1eB50QDd+* zvv>Pu7p9b@KxGcTD`!e|#!w}jX^+p&DrG&%L7O?rA!8URd& zpZxfEt^I$Q9ohhZ5?5$Bpk$&`Q#osMD&lS^H*}-eNhN0PuC`qf%u98k0}b)mSbg)3 z57`C(l3?CjHdo=m#bLI*H|Ys4ALtwfM^{-2q?TSNe3KrYk zWu&n==is)gV z6e{hv-%@||js?7k1aBez)Ll^g(LM?Yhm|Y_vOGatT6UCtRSoL?oyU0WMWVur6d7nU z3si7bZ!DYEY@A(+bt@D*LLX&HhpCXqFM*u7!~1Fi*3}3&8H!WsaTM~zZg#O*6Q|K! zwAZFgHO2WEkSU;3<`n4Nn$;)&>0W7&2)nOm7ZHh_%ChJWr3CevVJG=#y8)RO0OUPz zXc>t(1%$$d5heJ*gWTH*A4gYg)t?B_>MS+8hUhjah^?pmL0!32L8B6@lQl>IAGrF9nW>_W>TGqKN0W=1Tj-J^_Rr&Z3I>V z)!wUPdCfNQFpZTC7J9!Vo5}L50SHw15PX0&KG{Ax`Q_*N z2`=3#Jf-EPqsjbOw*u*yxf)z7ju)*{0a~FAaNWY-qkCEd=BqlB5STO7K(Y-D`MQeM zt2#PK`v5Ej39_{%02ZcNRu+V}Vv~?huRG^4vKqO0osB*Kw6nF!W@SNW)<}>5*@4uj zpCTCmX$=sT7Yc<$kz{4F??Uxig)9J4BEc_57(gK1#lA!#UGf}KltG~cUr4-N(MQ`S z`gwi`Dl}L6_GRh0ac$&ob(W+&r}yohUlMCq{+EBNdgnr78=_KXKXy7dVGu$at{C6Z z`Ta0S5ZYpl`GxEPKVX4`50|rqvB^U~8fuzgs}u-AIqmg4h(2;;K7%GFO!wcq9S}+z z0VEQDGC)S}x<&rvH>I{^8n0iW4{-ho+lk=T#oL-E6Nb&Jf{PPaBhSA{* z@6hBS_H74Q{`kF#sb%O$;d`_9)maA=yLHD>lPi8gD|FbfQ}j6aGaCB5P4e43W#KUl zJD?qtd+G-Qu_7A=vPmhB1xx7yz~Xb_Ct1>A*}xo?Ra+;&|J}tnNftsWEOrK|;S8Wq zsOBe0?GLODAoEH!vElepm#x(9=DmvY#IR;aVamYFqVs=NgN%^Ep*4~!M~-|z zfiLZKy03ut(+AcHaG3Ge|1$wr?{vS`{l9&W@v1z@KAmzMY}O(9NoW1nsBrDcrF~!# z_VjW%DVVXCUQp}Eh8G&XM)hMJQZ(n)vTC~%P<*^U87}7WA)TrDg13g9yUmSs9Y~=K z<|x1eP)(EY_6Y;)Asz$mb$tThLH$ohTr0ytB~`*#Jqm+Gl2B=i5Y%%-;6Dfj)6`Hs zK4;E#ew4NR^Q$MpHB9B()MJq6#vKoE{JW-^i&O3<4qqLmDVaDL4U!;6hPvviOj7uS5Y1INA}II6%y2g*N4sqoJ59fwj&5wG6_bo*4KkB*nzUwMFa#E=j@O*P{zh9=-S1VLVK{a;`3M?X5;Q4XX1^aY^sbJ$69JFRCbW0I`Re0kKt3E6PSQv$> zlwf}bC?!Lg9RHrh%`WP&#X%B#xT%j7#2(E|F`;&UUgJy7fvG++kv@GOBdc^#(!?<|~rpAD;3R0L58+c_>t zx^j|Y#SX*2g`8J;)^DBnq#e1PnGyY&z@?_L|M~+zNxmYLu$`{Q9!(T}`ew%G!{2qv z0v)v3HVLPq2)d&eEhs!W#Ebh=StfMSMquX_;*J0F7@ra^05gyNix?Pn4lKx?Y{5sVQb= zDhCqY*EAx*Lyq~w4uXeEQTGxvtr)G?tA#%(g;CVdi-91QvnbJ=?T#`z&RyntVAiwT z;KzTnKeeL0TT8`OY&p?i1=2*O)aOI)S=%ZzfD^X;L|eOkI)FU+nTxou!@FXhHrqz9 zky%gf2@C}Ei2{gd2RI`DyVISaXb%UD*YnH^_du5|XMG{f!9h1O!Y=l*k&-mqgsqxL z1H|6m7+v`Ca_ix&)#vx}6ZX{V*Q>sT?Q8o`9To1D*LbG2G>eEc%iiEsN1@NRf>Ur( zv=N9Slne079hP@($NGLr{Q3Vvbb<-kG9q5(Q02nSr_`&%hrh2{PR!z>CdQHAfIHvf zFO1pc4lJL7_uq!lgb*5x4XL_wi*vN~1Uk(m%}UMS)1BBXgLEiVBq=MP`FCLRu4MZk z5xn_R)3CcA+i`GyRh3@nWrF?u>F_U!X_Gju_2<2t_x$|_$=?(Z=rB~f?C%gWwMk2? zh6;qN0T(exFS^vWQdVttrM+eM0Rc-TrCuETP1fdY*OBQHM~%M^m!VPL8%=x^-w@$cwmRjsgo~x*j4LMK*Bx2=fkXw&J zWpse#N8H6WKq-@3-sLECJyF^B*MWU{P)VHl&fXh-V)F2s;rD%JS%-ZP^ZXtQQARlz z{%$Gg*dBpg-@JVy9-#a5y2T!}H+=*h-7`HH74xA|kUf#M@afcmP{SKDB(9DeWL~FX z@J{d`HJ}6)SnNro$ZGnPT=!0zQ1@aX{pjwV&i+QR}O=8;B{h zh$9dOc~VM*yQ<%0KtUlJoU&c_vU6BE%b2;ayRd^DekR0 zCF|#kElr_Qs-GVJd`e?-=0Lk{7K%uQcUXzCx1T6ZUPhp;dw0{_ACw}4ZkBU$XOs{b zR-j)Ji=H^hJ+5>l0lPS2uKXsE`o+xen8Ev2c~6}_t3aqB{uvNOu`5HaxU&(rvT1lg zbzCzZa074`+Oc`?4ax(>B)P9&32)oIo#qx#XF2{vjhdxpc~d(6>x-=(a?bLQjrQ_gM zkrZ(YQ&1)DpvkYAa+SZMHndCkP$C}5!Sjib%5R!E(#49+Io643&y8$KU*&Z1rezcS zT~_Z69^8q%7IWIl-v)k5`Y#}ak`?sm-yXhisCWX2uQnwk_hacAe*&YG8Y{b=74=V+ z%)ug`p3xkEvF^}AeO4YtI-Lu;2H7s@;|zlXXICkJ#ROa@BgdRvIj7V!LgYj2mf5ou z)eoIdc6O_(s*($Ezr$v*n|~k5+_QV;6aM*9u97EP@dnPsW%lf;8=r%I3M}BOn8f_tUv%D9N)eY9j#Ae5&rl+yOccst+s} z@RST7wEtcWvfeS18U{r`WTJF&$wR_1h%4MPcIPItp?n?npy35k1K4n;Yn8i_k* z2Zu()NZf{wDx{K>Y;y=5rYPMdb5`9oOwRhf`~Lh_503}eyszteJ)f`V;S_H11mW(K zjC8@do!{kx(cK0QYAPj|;OcXtixmd-I{g`XQB+t1P`p9+3%pc=2$ z8?SNomStJ4Yw%V%*@95%JUwy+ecSIV*_i>?ew#^@N4-!9Ogf_znbGz&A=D`g*h|s2 z$JLQJYwhM5d2|tKzhBytteO9F1GAK9rJUnZ>oZ0q2&uQOaFxTkH>$x=Ib~DQ4`tos zXLta9&fpoqWJZc5T3Xg$Bn#w22Qox@4@+C_xq&eIO3wZc&7y+JgKL?AIzFx1 zd`sZD>cx2Sh+6_$^}lgl2K|8i)TYHy)sHAPyM%=sZomI-a^3}VXlr*USg=iu>jGkc zPM6`P5>BlTS9}$$6)Q801SmALZ^rV1aR_=BAQbPC#rkh4`VufqohE$?)@iG>qCsbF zw5@=dOv3y4Uh99AP#Up+CkhaPSeh6O0mz>JkjS`JEfPy|A?RUwF!$$%G;QNv{qN|l zMA9%5yG?eTVQVdgyx*EuD}bs&F&8h6#Kvn{Z+3sPJ!BWNtLo2>;1-zt1?DFv|cCjmd<6(s4( zSF^S($^&-*WhZscI*KBsrJhQD-qZe({w=IZq@_rq5b#)s&YTtY#9a@HcLb21P$(VV zNQ$!90sqafqnRw5la^htK(w>eA))XZ;IFkhnsW|-%QK#-U)O}noY)j6r zoRn*YKQ~l2GL0vbTbv#W;OTV4FfrQIox7+$aFS@H4(?m=Q0gB(H`z-;stOosF7;?5 zBM#gEJ!I|Idw?95aldRN73JX_n!PpfVJi3o!5}7$VIJEo&)iY*No{;N#fBJ7R`=7d zB-^O1*B_XK>_N|}+DNXQr@?G0b{6Gk_vpkm1(zCxZrfH!+|k9=6jt401h1Tj@&1SJ z52DE!$?Yk>X}^S@u@<)3>jV!en6-di`S!?+H3vlwK*&^x@5fC)H{fs(45Xy=1-D

)29cC`^SP;~U(~{5JG*(m-0}aE1QKaZ@?&?ABT=wEt<>0yhIDli!30;il$n`1 zsDM1jK;)oSLo^P}6zfc~*NXIC?e5W0KUSt#KHGg`NF%UYinfPd8;^?{zc`)xxr}PA zG-}FWM8p2Df3es2&7M#gLY+ajr`&mCIi!E{qq})nQ%qzI1N~pC`qXhhG7HCJp})TB za8&v|At6oD045j(Za)sf0jJ_LQCXPi+qvt)^ufxJROKu)%zs|luRC5o0dv=|?|xqM z*(k6RvK&C6G&4d*rMZmcdw?$?(trx!tc9}ODI%aM==Q_uf93^d8ibe(ZjNWD8+%@G z*pYY)>gSAuHQ=P^+zQw41|eJ&=KMi}7|y+}{M^c^BeH}jkMn;?bj0dvN;5w@JpzJ3#}3paNme+f-SJzoY$Dix7Iko zDEyM?GRf1?fC~b=-H-9lcNZ*6iLv<0Hb}vI-$Zfqw5Q!iPc*@Y+i$&TH@8`&Iipm3 zlhj#jb^cC;0MTHE#=vtjf^AqP*FrZT|4UKV^23fC1De=?f6r@dJF)1GUD8{JELnI& z}n5RLCLD!-7%Nb{2c{H`5LW#7jdrj;%w)?l;Dpf)D(&+CXx` z<9MnYx#Zt}ZaDVHjYb{O9X~?uWC=9Ix_`3Q`==Pu)(AwDO9SrKQeS;I6`oG&gCgLi zKG!+kI_l;~X{l>-JLdUw^Z)Z=***H`B(Lptx%K|5oI+^1$0rl;c9qv@C(|~(wGRxX z#w0fqIDa4r-;i>a^%v2bw5d14QuO@}W|2bOU<1d@O}3~ax^ykEGI!vB4bw^O=LR~0 zUOK+asFJM<5AOKThL6J!pr31=&0*ib`-SL)Sm)p0@9axT`OW$UU2|0@@2htsd+n`5 zDFYo)5%(=GJy0*$j> z_MkJyX@XN@n$XCcbh{sHhWoZ$T(zKz$RFpqvz!&>046CCL2KliZ){*-sB$|ia{!T3 zpL-$;y6>#;{s%I7YDPChemtRbI#~DOGG#ZFUgT!o9*sDtIc$ilrI_CN-j=_NTMW^^ zs0$CNr;h9`J=@;uRzO^54u_F|ZRt0&WdRm(BkPzsXpro`?Rc;=_GT*+2#*IaLY!7Dk)16Y#D(@qIviK{Iu8*qQGcC$gZCISS3c3oSp-(AQ52Ln{czt zC-4gnqZQ;#GX7P5C9`Z{Un7kKjm%$7c6N19-uKU&l>G5C1tOxKy|{4Ue`3UTov>F& z7kzsPD0kfRwBZ?z3Po0xS`W+dsQI3uz@bRPy`+`k0|4p^)d~Qyj79&tZ-1>JXn}wa z#(~MQ0FhD921F_h!l8*ekHACTN9!IsRec}JoC4nsy|{?@-ULLI^=|&z?Zwq1CskFI za8(JfSpDt%;^-Gfs8_96zbEUw{!pmik59(AvfX0Po?Y@XW7paB^N?B-Df}@R5qefl zeyJmM0o!{bR(K#l0{)*g5NXNt_f2 zylYE>1v?eG?(r>3^AL~LntyQ`Xa_We+X9~C-e~9`lvU!OEvB0X_qzW$v0DONLa=*V z4~#uzuA_?aH9Jj1QC~Vj1LX_`1JoaIUXd*pn#0Yo7`;DkfvGx*Wil8?t613L`qWPY zZr8bH@OH$(mANBrvx{=Ei5DWG@=X7z$JX6O_>(eTLpjafqSxjHf_4&?V58U{Ha%(( zwQRI=_Y7Wa`w$R-BN5PPVfGqwC$~&E-1$vsklGSrYnKu48Zw%T1`fyA$;KI%iI@Jn-121ubLG8WQ@oL=fG^KYrzQ_FtoMsT}5UU&g2*l(Dif6 zUL?~!jA|XjgP&ob-Gic%A=ag17-jARK0mw_3WS~_PnE#K%ezb85Y@8Dm*@LQ-W4? zlLc75d#_na+@4EadB*FqP#ia4{@lPRdbtdC4!NC(bNK9+n!d$sIsbyx^6C#~#$k%5 zs!7Ur^ZmVs78!EB&wYaxNsWBZ;#`2?pkiJ2(*a}Sj8cj;*JBjkN@69mccqZZ(v3kj zqGPaqi>|kp=D>BBbo_k0?qQHF`Dvz(UEN<>oj^qFuhm>c|1pG__6Xj2p=~y)Uu!N3 zaP#~7&zOjbF-00$ZZ_{{tmJf&x@HH9bzz2j1Haj8Jts6L_S}w(&&*Q@$T4CWBtrzv z2r0`MVKwRG_?I^_(M~4%OES9c+&ubA*q5E=sGANZWw3-M&2doXTY}1lLDOjD87r3m zaovJwy|;)=d**_#0<-Q%1he7?hRR|&t2TyQR4=a1y5{w^!+8t!!0wG${a2qgOz7sh zCu&f7{Fqpz{IuVC+~qotL$$5xi6Qqc^0C2#w~Q&h(?NmJdJ5b(jU{}qn)xUFee9Zk zXb$CCOwFjWWQBXPB$)sx4HnZI0uDj4{^OnI<~N%W7%;?Mf_IG7M#HRBI!w~WpG6vL zt3-!=*={=TyY2&C&1K5PeF%H!%~L7A!^fe{ZK#wZJl=ArKq=>#;l76{s8BtWZ2yG= z-}jQS;eG*34X4bkjh)&_TtOT{AogG%rxGucZeqn{fb zkbjpwShj=T7CR(3f8i}pF14#FEs=k2K&X9r8L&x2Di9n=8eSyt^XuwZQol;Rpp&t% z2Cx|U)9Qc~)vQ~`<$#v2GD_m5cpu4me zQ~8@TVmxZ=o$$ z1cD9AhRY&YE{^%TubGzoQ#b4{<-#+_Lj6h^Zo8euVmw@;%t)8bg6V%;w)fc)RkR=5 zbRwkE|!8 zkOE@V$Ik@gz}Lq)du|ykKWw{zwl|C`HpDd$SK^C)9Nk8%63$e_$zSX_8dKGEPj6~P zdkk!ufCg_ib3)Gx{PzE9PVUfXeN}Ya966F!gp($oxhp|f&k~RPL4^+F;~*4ojkD@P zVqkP}A^XFp{W^n%M^Ax^SaixXO(YPA)Tueuz&K*z2abJGMa2L-pF9MYm2=RzHg#0c zh&U?MN6EW&TJ}$VDvp7VtT*L6xna9pWk^t1O^kxMTzPV|tgK=!z$AhB)nlnYJ^G<) zcIal=EANVQZ&|!>oO>e7;=nghxc+Z1zH8ReS^9Z%?avJ#lAM=g762SY=6{}Tx}ds| zM$JXQmnwOxif7AvCtB}TrXm+#6%$be$A0P;Yv+B&N3lt0r55b7$ZvWNV+GTUKJ%hO zC6+w5<~?1F^wSoq0XCp2EyvxhG5W&nu9f_K&6B5VE(*-yb$O2^qdzy0^&dEuSM#ns zR`*@g2Gwdp%xz%fw>UsvEVp%6Y?t&zlNE>6xmMKy6wldQ$ zmqd%vv)AE=N7WM>&EGB|zZ~wbB_>`4E+mHg$>mVcX4i|PI!#RcLVy6{%@9D_dFAtM3w=Y_XsO!e|Al*iJ zHM{RlZJbNhVpd!M3H=QAJ|2oiuIUUrKl$_{vgyBSu~W8vy!99O_NcvkEwie2f#PaM?gl zX1!SM{N@SDjTM;p<`%c~0m82BLt#yiy_M)+Qnb1+L7$}ym0gpTUw~C8uC_fOMCwLe zGq{<-DoirF^!GDk$@mmC$>HwWPTwjm`xNKz7=35mEq%_7jdDjIvzgD-u`r<1g2I2X zH-0bv>~Ec#zY%nJa01bw3ZqZbvH7PZ>+`Pw2O@s?fv~!+_8rP^1pwE10^_f1Rl3o z{|C?PvccUo98hAY!H56BX5cUDA6v9p58FbOhC|!%c=fTIn$JC=-OD^bH-(BjN{eA@ z_9DUV9e$PMPb2EH+YNWPIiTfftI+KHd&3>_kcNG#%Q{FqOaMU1?h1>hK?#*=@L5@h zWoHoq0ycV8!RBv^h^JiN48)FRf``MMo?XTi^dFHSl2nr}BFtL?;Sgc)9DX|aW#zJk zq@FZbX#H)$0?NX@H+hABbwsb~?6%u`uG_slVIJB@q(#KJ^Szxak!?!+y!XilY^8Jk zOz#Av4h0@RHup&_{;Kis2^A_Xv#D0AP}504doSpz0rBB!FUo{EqeL)U2Loo%txzhZU$Xd3pVfX-UxJ%M z_>w1oJBkhPqj9CV!>gJiHP!XJl}`zcj6e@|Yd*o^#S8?P`~ojWUr#k{0l#?!2F@?- z{Uv%3zU=Mowc)x7Pu8M0u`>l4 z>Ydu!NA3r_HPk!>mH6hJZ)Rmnfacry#^>^x)iAeIbrcRVt z{HS(riz_N{OZh@eDMnhWLY0*lGr4_5$dR*O$z*U1KmsT3eLH-SI0&uo{r5ZZ2}(on z+WgIzAFOy#X$zszNb|f3BC3FLNW6S|k35vBtcv#~pVybwwGcI*4gdX4B+S`GHf~q1 ztO%M%grVT|c$N+N?5VK8>|&(Yf}a-i=wIirUi*cJ=}{GKCArETXBlVmB*6!dpT7>R zaAOhBs@){=LwiNDD@DN&vvbUn(@iZ&b(>rRTU(l^=B_8 z4P-6?&;?x#1_m8ma^*RB1jWt$z2kf*%$hdQ}Z%cikT{x%su+w09aR-<<;D&*G-c3CE zpK86Lx8`&K`phjMgHtyuqnpruRWisZ42r7y@bAvb%>8!@h~5dm z4$I}2cCy-omp(aY$(UfF0!=LS8C=r9)_?i+sjmXRj1M2EHvkI(puFO}L~aW%u7T&~ zCzVcXS$5P(6whPDxm&d9eig(tLMZw5?yHg)p@IDN5jabdNYrQgb02HyK%bWEXgl0# zkOB_@0m@%=Tuv{O_Fr9d`CL=53@MKmlM91`er~uD@bJGVcH`Af19_%48v8FQYRt!A zG(X29wN23V01C?u8ctPhlYV~HS;T#8VWhd*w&=)p9u=#v%41>S3-#1l?psK6i<&!= z%YC1ZbM_(w{(%?^tp*0qn+Juz$g5u$;-qKwfGvcxjf#wS8H1z=v_l`1n&YDo@^JW} z4^*V~SI+(QJ2r>^T@iJMC_}T)lQEn?a<{QPk-qPib#CmX4$X_hfnu&=X~I@{)aZ`c z;hc)Fs;D=+88%P0`p5J5$=2x>)AF|7^8p35BOhkstJuTfUEQG`v&_hP_nbJlb@T|JJf$LLsGZX9{!#mSyBoS8o_2gb+U}(AWIq0dBLp!!+oN0)vhq$Dcy#AxS z7kHQ;LrRA8WvPB%>k64M4(X&S4ELMV2;L6iyWZg&|N?yI`EF*Xk(I)>n{F7-_1Q zCS7nrlDVrfqG{mx155;Xj-st`mhC{1xr|n@LR`_HxK&mpmci*gJqXQ*u@E{*bdSf} z=RJHz_wC0yu-;=zA>?*?cqah4g{EzxS_nu}R06`nH}3N8v)Xi*Yk9fJ>Xth4%(Zp3!eIn+NbnrGS?FLJAgkDlBT6<5!;F+3UEJsrA!ie=_AF?&DQXjvPW8lj(X&RdPoq7i}O z+02p>_6<`lyi2v3b~;Yx=Kx0>TsE|E1kklD3vA?s-Lm6~V*LW4lk^M=Yi6!3%+6oa zan&Ss*rXJ`Gbm)4yA{7cHrLylvu{Jfyi_B-7WYHk8H|T|at-8fI+*<5ty&E2EZG@R zF<@&YA_bDP;^w1Ow^toVFa6XHB+`&HVK1f8i2J^I!s&;Z@gkvJO{uDX-lF5}2(9n5 zO(D=opBX6hwK%|O5H}1NqBM^Oevp#d(D`Ktod2mvx1!OGO?eeM2#q%;5ykqYV__&-_Gp<dyf*ZZq_Me_9Dg~Xu1rWyx>Dr&sXUra__i5t$z|FCkc!LjXV1%r3%ytM}9?w3rBVG3p;fQ0U*)^_0wVa&{+W$Rqz=)EV6&VY5pqf;#yT z?)i-*MCIn3;2ODq?HqVBA&0Iw8b(NgH$6i7O zuijN@-8j`a>dxiw_Bdhns$R?TRiELR$X@5Vf^MQl?k2Ch%NoY29z>O8V>N~-PgWb~ zYh1Xbc~KZh5$9VyW8x{kv8y`KrojlVsuJgc*vR@_WTo`KG0(m2x_TR5K=21WbA5j+ z)jP7+y`5v9g@$-`Hf%O4z1qY-hHhC5P3R!Bye3O5d5V4oZaAr&T~;5v7P!`}F6=R$ zX6nBJt3WimmPn<6j7ei@dS6UlUU};1$BNHk7e;vV&m-;%a(TVNLDih+I_7yi%Skxj z1%6YyzHzxSg_*A#QfWz9;bHV8pz_0$xeZ5~4Z!$T!(SaQ&P-2gmVk5y#1YAi7Qjeu zw>`d&ZsB-MI2iDj4@6?~aMhRO6;l@pMpt$F-kgX=DPD&b40~F2KHC(t-s?g1-_U?` zVdfQ~GXLq2-*GAvF zLvuHHvkg|M+-fvF=xp3;-@}|71_;L~y;qG9synLDU{TDHKL^h}nkw<^VRi?ETKfeF z(q5Hi=b-d&H&Q5vb+zAU{pQKPSk>m|T)DGsU8Nu$?cD^>T<0# zaz8CRZ<%;nsNA+Rfw=q{0e8g~rt64%7GP2AC5`FzW)~nVT*!FYPg8CqSfRhlWY4O| zAKG_!Xpb>X6WU8<I8sUfdx}Ew-V*XSiqCPge)`5iq3tPqRbt>4cYceO z8o;_SKR4W6f9(8<{Ac@}sk*OWv!@r((B`jK=om9dT~k zM!CGkJ?NlXEzEDn>ArCYQ8|7|Cn9rS-b3Q9!?RD^IwK8|%K-qm_Q;lS8-klqLzEFH z1e+|t^W9`QyA8Us(eoAHle&w)pb1s9WZ@I{t+3B zS3dj=fEc=(mh-#(puqPD_&!{ht2Ze0E|#Ys+j zpsp?Ln8}aWSsx}wRVL7b3T6r(q7cfE;5%ce17DM(@&Z>_wpP^f5mmPb>2qOCGWTi? zwHGK9x6M|Ysb50w#_sb=u&4L&lK1lygsp-!K5u24>$>pzn>2|chr6yORU6LQci`1f zXim-B{PVQ~A&<*Z**=vp>+IhjIzLlOTm4PLnAAs$bE*8sbZT-je{;4!O|ktdfImtK z%}#~%b5=P?j3koZ^i(XoKsg^)09+!tGpwCM*xDdCKMQE=oRo`jPB;9L{V%G)T@>Jd z=35O*H=W(dv)fsgpU1Sf7n$~$%zE{3XFRa&PzCkDZ}v?n_sP<7Hl|u4GbRhDbua^}1WWm|&DSDvV<|9?o!RM;gLs zv^Ks6c>I7Q^P7287Iyzl!P&wZ^}~X+=}p4I+R58W&!8+WhjYup zbV#V*MTD)m{nfwgWURiw^K%1lqQbwoe|sHZyXc<@J=>;}Up}pyiEI6v@i0wn)m;%+ z_X(ppI|I!^+XV$Nm=5Y*mVc)Esg!O$<#j_XKR++0);L70 zEh1yJs1MG^zu-Y=Iu0feDmDMp8Fm@_Vcz)?$Yx%cFKssF5M0c;D|uq{o#BZv=}OIW zy_2H-cn1YDf<5Iidb1Uk#PNYxxS3VLi!(^-S`a4AtX|5Qbhf<50N&obBZ6!sP^`L| z2lyNN6Uk_svq+>JOj^&<5sxZom*QF;uz+QX@erROF{01DoIh5Ry*l1GRLC^Gw3=XU zAw#$?ejjc2!=jb@!c`b0rSTrb@FPl@{hF`XRlVl+h#kGoiNuWG#?ZA_l@KaTWX4Uq zTZxWQLvKL-ucoX41k9xts8zW2colv$Dc7-wkLk!#bqUH|>z%7TotpG7K3hFv9_&Q@ z+@QhqNeo9VJo@(1Yq4S~Mf0@}H90v&IH0n`p*$$b%)A(XTo0q+3#TtYad64AgXTw3 z&l&-?ULw+J1nu39TQT~LO*GQ$wESZoZdOe|8Z?0?+VC$@EaJ}5eEcfRI zJ)w)4@Q77W0X*tZ+@;z(W1)MyP2=thkO%2HdZRTKXWA`@C*qpYM^!C$SE)@BC0w-& z4G~>0d@x$u@RINHS&LhL z&5EeTEcv7^>q@9*omj`LWcawkF~4l9uIp0i>8$)>Z^pm*ryM$Wg}(6I^8H06 zwPhd6MAUEd86FV1NsrF2V$?P97huxL%J4kalo;qQ+@)U%{{A4dO{+CoKP{xjTGlI- zysztQG~WL`tnD%KayE#}14)z(6U9eEK7@6=KqGd>HIn*NuS2PzN19VPu7>y6^XEr; zJN4?TA%77fDza({hB-}yr*642{OA}kIePl#q<^W3I+j}~&}@te&7%u7a_A2icir52 zyDab8u`M~R$q{-K^rn)J5O1u0z74rQasosk9?!hEazGmS{PuC+wDcET+}aEz)TUl5 zNLOLDvt;f-XdQD%*#x(YX4taYr&dk)gYiMnP?}=0%Q#>T{$jK6*N%FYjhkQpv4=vN zi@f-%qZ=n3DYk+Yp2{|Hxn5l8MCF;C4_7(&d<(Q}M8X&fHeO*F)!sJ`7Rh#5w*G~&(#vGzNsbm z`$jB13y%a_Ki+9(z3bG_md8P^J!tscRJbs!&mTrR@v239r0d;6NgGJ$bfHbX)GP_u zZW`BtG&}hEg0#i)h@TfzC7j{K#Osf0i(*w6fsqDuQpq|yJ#2HV#i!TMiZ8PI=wx`a zb~iSRxO&sW=gp$_m!M?-V$b=Qs=*`DQe|4pxEq{2VMo>9X zN0coT(Bs)KnA%l#wGg{!O-Fm6gH=f!SJ_Q34KY_59;j{@QfmXP1jnQ;cRVrBEI+F$ z8HZ3`>+EhD)u4R@R=%0?K(2Pmom&nu19Ip57QZJw@9ri%YoM*RdQi+8t%@TK-7XeP zd{4Ny{y?yL+M@m_Jex!CS5`Km73jJ793Y`bRTYdvwH*u)Ze|oKm2}Y6tC)RDLuUty z#prH(1>S#$f_sOV`mfJtXAx|{f{fMC!{r!n-rGhNS4Gk2i6yC1?>elxUDX(kPpgMO z*u!v3t#gm36Vp3o&8z<8?J;NZC$BSo#RqSh+!K6T-k)8u%cT8Cu?udb?QuXwVo5U= zH&sZY>8+v_o#P5H7+p-em`+5gc{*x#)Q1*QMR0^kg(fz{ykUP<{?Rzr3EM!B;2@cR zQC`GDnYJPK3bCOFKZ3>~)93C&tv|ER#rpw`nezOAU&0}skEhI>3hTI;EvwNMy|=qD z)X(kzI;V%7@^uBND#<8>i9}iIdQthqkis?bPP7&KTLio&oRj3VxvoQe+jL{E2!*`^ zEo@>Qyke7VbSD9%44|jub@BhOEeMO01Y5i8EL=mes%~#>eQk@?tT(@XSiW*Mh>&Al zF^^t2fLxQ1eflx-ur=z?=CAPP3_RZ$(iM>uedJhb)y-`3<= zd92E5Gds*ya;N*>U6x@45e zT?z=`-Og4O9K$dBw3aY34({|v?qBOVGr0qqe&4J}1Nl%+CiFI2!~x)Z@cxWqV+n~A zc-Umn8imXhGh$*7hnO-=gMO2c#qp(fY(ax+--yhA_AF|T{IEUNUZmYl!)mf{Z;<6$ zJDXVa4CM0Lsx`vr6^(#w>-s$Y;rFSh7Y8CKA14q|K3p!B<*nwNm3>p$lv_D#LC(IO zrEGzKd+BYqZHO+BBN39^gaP4lZZSiYy?DbU@ecfweD3x3_scF3jZ)f-KTGOw`z4$ASg+o~T z*k*{o@+-=x6Iy@kJ4H~;-Ed@=~7(O&<@Qe@9e%T+_7!2mIfXqh!Ml65ZIr zFFyr$?#s5@F>lBTAs)jYI^jW~)GQtN66^Yk{SjKN54b=g?bxn9tY*iI^{!VLI%HXv zV?e->r`=Zd<0|P6qVDJI!8Nra_~6O#Gw83(rKhzu2vgU8B=r|n;ew;o7IcfVJBLt9 z2(gwbO`uHPy@$7poK))f=~`tbWT-6W-Y~pSGvZ}|Trd-cSI%TInUt0pknibF8?Ogb z#EH08UF=^2RGc-0!vVa~FYeKU*(=8OC_fj7h@Em=c5ls%Loh7+-V!LsX{o)VRHHq) zGru^Z`!72wk+G z_1n28nx9HL36vSEdk;6}W;?P7?3+2=Xg8Ju*d zj>)~0aHnppF&Liw>#cbEW?pER#>dSt5On%;R4DywS&m~>q#<4~lRck>Yi>~o`}mhY znV2GO*BOE^f$l1DRi(cGafL=ZF3DWbt9xec4B|Rtp^3GA^FHq=6yNdh zpwzXdDzH?DP<97i;MY5;RbLxxPWyh92QjEoU6=?%^r}9;MP0;5!16*<2elqxjYSmRa;(v z_<$}Bwo`1M2*#Q;e0VPEp7bDF$69oA99 zs^c_f^aO?pZ?iD)%NBxY#pd_oRSMtbP9f_`F=~Q3!MO}8m+GR?4Il2uSD{cr3fTXm zzXkU!JXY@Gmm~(#Q|M*bf672_w`{dXDBDq61ntUOMe?1FjJp>(#}ALk`kS6Xj?pF3 z@HC{HhTJEX81%lBqOIowm`>d4&wyi)P~|UJ#E8+*T=$wz%}GxjqFQ|3>f>9EANuy~ z6PBIq*H4$FCw;G69HWGf2@Y%XyjZWA%(qR@MacYp_174_=bC=s>Xxi`!FT=NGeQvI zDblRBoRK%BiCw6*&TUZcs_*l>F7$eU5qEIc1lgvu${UF%Mo}0f;X+NX5T@KmQ={ss z?tVJ+EKWAK=hH4L`HTBMe3h@3^^Ma)92_zC;? zpJ0Ln7p|s6@t-9zBbq^}KlTS=j6xdHy(q9p2&0(VqMrU-TJC6Dr%Y!?%CN<4(iw|- zme%uN2*_Z-A^%N8!rnnzL>A!?r{)jC7cRr7^@(;Zn6DLWOYi2OB`c*G*aEP}Q_M2A zA@)8WYfjh^zh}t5p9U|bRE~gW!V}Nz^hwj=#>>`j+)IVdwv7boulS@<^(5=ewv_Nl4vrdz}g@h&5FJWSJQ5@|Lx+e@+! z47KVyjrO`YRw|w+)&w;PG;Z$jh-<%l*xX*!BcqL)1<}zsPd7)s(nj}zb^!t*1b_BC zHip)%UCQWb*Xc{8wG^apVmQaWb2Y1w84Hi!WA=U}X_!2E0#kKmW^#+Lb^`b3+F+Ss zC40s@#UTCn*kW;$bj}S#Bk71t>Shw;HR~vqLl%gW;nZXd7}FU7QMk4aLL+QHhNSbp z&5VdJWi`lNkn3d6`V&LZ$_EN`dZanx*&!|WNpOVJuk3(zP8BJ6Th_{7Vgg=X-!u~3 zQlIL6!#D+7agxDLk}YxByi1s3Rn$~NL-T~%g7RX3*bjv0SuAN}-qiCFYa2Zh%%Qju z#gID;PC{OJD1aKK(|BJTB$`y>ax1E*2(1!~^~2GqXV}F|8+TdERTjnS?q!|r8I0S; z`X%ANS8Yv&H~^0y%HAZe)oQIZVa9fe_wWo35({BG!coy?*2DLrA!n!O!`i~8T16P% zefVJ-B0skVA;A&$-?4*Hr#>0jA3OwdAIbf>Fbpj(%^LNWoDoDM54+Ms-tzH|W{fIH z%OTB=dKr;VAD%N;d@8z@gwc~t8#2od1K5PVt#6Z+A z%x-D-XlZB#xjj7myOyPF$a|}0i?Sp{9g(w5q@r?3kwX~lbB4*@i=Me(E zfja?yQJt^d%qLgw$m}3hQ?d9aMl5oEXMlNY0z11HM37&>;#%8WnOjaTXJ^$7h8CF3 zxqk~%^+7XCDv!9nh)~z>0vYpU3Ss~0bkbN58K54VG^TSRG_W~jO*E&%K9``~q&__A zemyJm-~2DF)5TXm^}Sox&;+F**-OaL$1r7NeX4O)_w-}r;z4GLDE!Q0{RUuMe*PD$ zi6pNvHxGr&n-3iysz|JP9>?*|hP8-?8R66Jn7}|r=vH4lYn7zbDgI-W`SYBy6A~c3 zg{L=^Nx8otZM~0<6caUPo27R21^0nEAV&J{Y<3b;-0h!taA%*!^KYM$zbzj^^|og2 z)IeR27@2I@a{Rl+J!xO8wk$})JW+{P>*gtSs%^WN$4x zhb#=sI`PQ-%Y1zwiZ8Kb`i~#+x^z=wt7c|*=@R!*v{zA=UC{$C)k;XTs8k5x?)bZdqGvD#{#a*xd$;CW0KcBES z3IvDx4gg)SS9l@QXMUiS^zAZY=Ju7J8@ROh+NG~Qy#6*7++h77&bI!SMav)~eIk5n zC~~jb+{r2s{DwNHp#vOFEfOBdu{_>~mf)nY$Jf`rVD0iIb)%V+)tJ~_kp>Hu#fwXY z#MJOi4(8;YHfLfm#pOGMy?S8i=1um^WHVsW3_Por7-HsMY~ew6xq_RwQ0hVS4C;Qd zaYR`d3EQN9by%p#PsEhk*CzQc-NJlb_Ma+8e0H@68!BS4SGTJ7PBYcT*obN6dO6-_ zQeyoF_Ij-KX#wiHJoNfa;a+hs*Z_F%H$W>@^&AvZr6X#;rfxDGPgJ`A=N&yn*VZs- zxA4oMtF~caytd>d9doD5bm~&J>hy_F!E}k&j!&J*@9N{Bs~d?#BI9yi=9l!a@)O1H z=d1=^Tg>bXP0e=YvTuTn<9(fdYa-e4I>}}~bVT-*BOU)|SOar48LbhqeY>f_Au~?Z zUbM0pu}{V)i}VLioC0kyQr4mx?zofn*qFYuMP=Sd>ZEbsY-@H&8BJAi(r9rQ-0d77 zGkiN4J>xwh#NHaG5-gs|gNfnCB~%EDL-8;3{&pAgr|jCb^a~zueToS!TD4V-{pwR0AIQdw!q_Ye!Si|YKdm*d6>)OYpKI0t7y!#X^Zib{cI@m%?&+)}lDi1CV-E;|&8DAIWNM?8_|x8%h2AiXAwC5o9HM^ZGZ+NF`iA>6L9#>S;lNZ^R7pOWryc1{=BC%O1Ki=E5{0 zf(=A%0vbH~pL-d<8%*7?Hq9Z1sT4+g*i>tyZIV)9xzZLIm)_k7<}KQDs&r7TCz7kP z|7&*U>SnPzil=C%QiRzL?{qD{{u~(AMe+6@D5U)t-mdLIo9<& zcyw_aO3_n;1vIAP)LL_S2j=L&UFDjSXb|!FsKS$|X0`l%Z?KTMvpnk6VBBL7Swpj& zH`{i^>Q|GrUdDnaIiPYZ`B2a}MtuU}O zcH=%%tQ*jmb%2H74}F>jUw*B{Ox+L@&l-y^V20L5wZ2fh%euGpv{9g~@9py5Epl-LHPBVYFtjI#W!CE2Q~5VAdFg zo&x3Asx@nvO4x<)G?PYIAU`^Q;^L?&HfY;vZt9xeYYGZ2RF${V#cK9_;0Zw|;65{P z=w;m3XIY`0k3@P^(+_>EVZX+kr_|aeLa&vo@&96U&uFVLJZKr+WLpU(tg zSF%Q5@d7_EWA!?WHm+<6<+*kF31H#5U+XtzuL^@(-=6YKHX}S&-kR)KGG_r||5TF% z3vLALa}I^ZAO%qj#&?O@fFS!|^A>2u+6zv$uH1xh>piVSRJ9>KILH4o+uOVC2Y=+;+c=QJ`d^`dX z1w!!XDDbKg^Z?AkXpFV-OV=_HsYJQd!hKW)G`o$G1y--mCcKf=usEOG)Q?*~6%uks zIuKw|9w~#O)|CW~SOiH(LtzoC3yVQZgQw2skR;0t?Wx$B$=7YC9V;Fia_~KorD$9X zPo)O#qTk=9rKm61pY6slYl)iE6&BZP9a!7u64kzp>RDtN6@g-avrt-8{@O{$a`Z zo)A;oTWwyKziFZ-yj}Qx$L?C}UraS9SUiIf2HFB%f$2w~REQbG&;*}J6 zWK5e7<}h1kD5r{i%^b2tB#j(079y#nIrd5Kv6*uik}_5*a!BQ{k{LNxQ;DvUAraL` zwMwqv%g?Qwf4Ysg_v`R{zMikg^Zt09P=To_$?|tl7r*~e=J-J8MB2i)P@TL|aGzB` z1A5{9am3ydcgnu!BM3Y|XCjn*_6$suFmQ5#l9GuVfOnAwRplBj>0*5voUG*Ls1GNb zo|Hhl5t|_4`f4?j0RpCA$TBp7TAhTbU4b)Sl$8;HW#tA9tHEICGo?#<71#@LRgBO$ zU`ab3qChb&ZP#lDMicrXgm4(~NT3`7HrNe!apXHMRr~`->cCqeVQ#?vw|{QB^KZA# zb4d>x*esI4<{RM#gdtQSJ>jS{a57|5o?AqDq$0fRnm9xso<^j)`E_jGFcPk#ftF)| z$AkulX(3)RoiA0*gk)F(Z(y-A%Dg#<6j(OkZ-eB!%MN`;K{^77>&K-N&I63v4Dbt{bk07wg3 z7z9VlHABOuYG^wZYU0RIcu6Vk6|>MZ=3*D@?sV1Quqqefmwv-4YGCig75QW7_NCi@ zRI8373BhSc5kjbidWop2dTh*MdxbA{oP*sPl29XkD5sY%$8t`WHn2Rcz^=)Jh%oR{ z@%VZ?NQVJQlA~bE1kUEB*u0k4g{=_a>Dmzi`g89@L_;)>?o6^p8SWg0UuX_{t)fIV zQ#$vzeSu5`wKshy3pDGfs6<$MbA4B}{SH?f6;+G51spQ3AL)DFmBZz|g(-O`;4AS- zU5UIC8=!qbHxOWpfrZdRVrB&h3&8eNj@lu|yy-&=s8l)wq0uTEotEx4W9%;;;2!OIL!Hp9P%ia!F% zEz1yVsx|y^bj;m*GV`N=GeXD%X@6J(K%PPv1P&JdjD1rrY%y@e7nv0S!J&TS4PY@> z3Q-elovSo;bLjf?n1<0QsW(RP)`?RrsX&x#4cht&+4^J!~Iafv?14+3kj!ivhnHdSCRi$k_oK6H6a zrzaX`8W&ZGURL47m+q=koT-qq$8m z@l8tSF7Mj2g7L|$7Jq^M(bpX7&Y5ru*=9b_7=0s zFWTj0F)HL_Vx>+6t6OMmIx69?FoK0X3WgdMqJNbBYY|^)O(8sAuF1I+ zp3&rQKV#1d{(FXfP?J^R zut2t(gqQ6r&T~>*(>1Tr>&jy7gpsjL4fjjJb%GfXad2tv&SV&YFaf?I6_yQm$>-5{ zidvWfdOJ~pV)oB?p(lOO^Qqip9l37Cu@x2CQYDYZDEO&fFUpbglv{jb#jTQxhzv{t z5F9~5VDd*BfgKs{?|LbVsDL-*CI$p}JvcfKgOlOZAGK<#;BTbC=j}RU%nwvU1?ngXSs0j(%?F zZ+NnT8mxGQvZRCiONl-rDyNsIBD%t~VBmrXNDV=B6#N1ZVGkcg;2CX!SD{7uqMKV6 z?KKtw8{rt#UDQMpSJrs0>!*oTC329dx775b))0JAjs?O?8kGz?&17G%w2WsyTUz$F zvo^hkK}0s8MDyL_yQS4e?@u6xl4mas3WjAN)>Y%2DS;(LNJDg=;_zP55hPRl+!1je z^ct*Nz+i&Z)I>tR3cs6TaE=>)28K8`2 zTbN$E*twqNsXiQ%e0Zut-BUNNb$%!{84a7@BQLM`2X_V`7VkdF$hb4`Qo@_tVFiVC zBiYI!1iOt8rk1s~7(+mE?FTg4ZbXEtGQ2d6q^1X8#cQ~G(CM%?;p%+hptqDrGgZUr zHGrIEv;J#U_EEY8!g;cce-p%~k&n`M`75dGEgAujNo4~6Zije&!EN4`B8*($XhE{6 z6`Qn=D}%fojPpLdzNXi7-YHO)2}Cvu1VR9^1dw79ury$@h}tK5bfhez9~q|e9a0-H zJlV7FeRz4bqka@99}p2RH2PRM)fj5ZYa|tW59_1B*)t{|R*k74ZtLmAqgCwHzf(Z+ zq>lZTwlqB1p&Ybf^6;DMi{YimV>6(f5#%j1@?>e5z5meLC$yZ{c2a9ObjnF#T5Fcv(E zSOT`aUu>bOua|FrI}hp_L|Z1^?yIkRjyuEG(o&P!?X1=Tjh+gE1-~RmG~QvC-$N}v z=0)0I>h7X7)&#)tJQXpSRhRHYMu-A2LTu$1e!U1FrSgCcP?%o6x?aBBH2X>2oLr-V zA!R>wq!`lxskIncllM0F=|?PmgN%38h1gIY#yR4x9qr5{2fkWx&)m{!AS3Wp-jWdB zUKg@SKsGsaXP^tD6>x}vfj2ag>!yk02so?slF+VFQV9%xh&bR%M(ibRkIK|uIv{92GK#LJZVMouQ@ne)@+VfBA$=vJjq#Kt&oVk-_JH99 z1Op{RTJ%c2UkM;?KOR~HE=BNCw=~tr?L}+pXUV?V5)S84LoSt?aJaVCOj#)A`t*p5 zYNg;7tBD;DzoSvM<)rh9_MkLakwM3uJtvPA)bGN4831kbaA?3Uks{OwKWKZgs?Pof zZrL;+`*p`o<6XoM{bZv;;!#z$n%Z&mwctr29*qUYHH(%;HzV>IcdWnnZL-ZwPWW1O z5fJPLE&$ze3xDxO?8=Xz)OAiv7BR&qvOCgCfgGy?cJc$G1QJi4*a2n|gf?&NK|4=U ztCB#O3IPXy)_X%!wJ!KGPGLgByOA zYg(Cyw%?0)OgQu?J6S9J9^-UEH5ztPj5aQ|1DH)WHS;5&acJ>o>2aa+B_eG-WET)oYs^gb7jDmolTY zw`n|rn?5=F`z0dlc2h?4NI2k2ODv6~$a(n}>S zw+yJ`*h@e$4h*c%E5Wa5r}qads;LQw#18AeFdQdgN8dL|EE?e?O&vdXqQWH*a-3KG z!96R6H+1~ZzXOlfz4$JD5_ta(5sndJa3>W=&ehbzP6a?Q?JwMV5x8l-x?A4;(*>ED!->!2KjCvBf1>Vrq_=UvICB7R4ayW5<>W=YOg8~zju(&1( zUki*!5d93^IT%Ar>xQye?%s*8?xkzb5oAfpF%`c|?-eEXhpY=ha)2}*0Fe9MI^QDP zAmQ6Nuz6JL!}CCYUx^ExfzpT36ojWd7A+%65(D-rZIv(L#X2&4z2fH8tG*~ixe>SP zn|jM4Bgw$LHUSgl3m=a;k|F(!BXijN;exzbwq$ZHK?^Z(&OZ5mBm@ce1D`vEUKh$* z*Bz#zq}0FJuE)?3PYfMLHc_NGb%t59IS5 z=3sXKh%Z%DWe{A6s=&IGTJrs5CdOETj+Zty+LgpPSXA=V(Peh$9!K zhQ@N!Sgj`jIE3SFwm|>_?)Z4#zdO}X3cTak)vjZD+%bgPmmqc8&q!H#k!%D-7N*;z z?*0J#iM;6M`M*p%{zQf$VyUrq-?bxcT_iNB7^aXU)R~iczee-mQ4xkBG~F($UQ^PG zo`LDF?J!0qrrXNu5y?Nf=k4MJSoi+fUL&OpC1&r9Vsxl22kW=#%-83SQ@!bc><>Q& zQ~%LK^_(!%U=2145EPODPnal@_Q}UU`(q)q!TdkXAfXI^r)Zp#`rx-F1R2?{^VEw`0Ym(t*UFs}koB#s$H)7D%5g^W5gqTB`6J#Y48gIOKXdMFV5Fq(G8o?d#zh-Tm z!I=nqRJlLDpmvX9K(`~pElYp;^#3MOSjXrqla)W(sL{?BG%-5?#y(Apw%yiAv-$Lk zctPcvH|HqPcVgKq+G@K94n02Em)Un8Ik_qoj3% zJ=^U6R8BPRb>`;yilLEtK5RNExS(A~K>d^I=g`+_DrYsc<#_{l=XCeHs@w!WYeLQS zlf~D`*%RuaT4d;yh+X1>QA1H%9)_IKsr3eS1Ur?3sNYdfS!nXaFObEVrH-|XL<4D09F{rBXTk4)<{s>!Etn~EB zeE)Kg2_$&2vf*s4XgZ8ltZ-nHykll8=IYzca;LSOW`7}idlHSFHD4XsqEL^l-Fw*c zHMS)Qovl+CbjH(=b90zeurYdSujRMJ;hG;F$OBc|WIih-oD3p3BrXzsyRZFNa0AF{54CXNiu?XaxPB(Lrn=@}$7!>nE zwljU2;i>yf(ytlqd4Gd>i19kQC`Gc~B>6$r%B|juG1{uIYEqY1)_232QfPF@6{ra+Ksh8+|7QYnr>>CMVgNwsP=+2Bi(TO@zIS=#-&hY`(@<5_?TL zKYO2gxHF&SFKA;~dYahCQ+o?Uiq_@!%@;8OEEZc*-} zy_!a&$Bs4Mle;-2f?ThoEm2jQc9cHD)u!B*-dW(`;)wl+Oq^MX*jY$#NuWfPzM5W` zlT^^_?BC;;N4SqkD@y)e0;8#~o#wv|CE85MhE-szi9}94X$Z_M%*?W!dXCQrp2XZlAYET1=Ip@VsONa_^Ph zb#uv4Q}3YZ-~yHj0?3NA?SLD~<7h9tAnx3%oyrbpClW%LQf-lmjyp`FP)^ehXO;dw zh%hgi_YS9tt9#QQQ#|tqGQDS4mSfnm1KYY{r?Rf!N}vQq=2)EQ31uWU)}a+V|8cFY zG`U&UsSoFbu@#&OLTZ;E(>~D@YHH3~VtjmT?x#q1#d;j!47@MPHXpojc zf1EuuS_RwW702vKo`he`yC9(*3jFuN7Y4-<#{^nh=k+u56We8G7cak}gCjvd2GlF& z5h4*d7nS?10e`43E8iI}`v9*?nURpPqVVG-D*@@W5v6OZci4kxC3 zIurCyK<>t5xvC5UO4X%G8}XxU`6+M@H`@azw|;O;I98E2>!+#UCAg@O^dn=kDwLKQ z)-SEFUwQ34gRht0w%B>R57w@x^XvzEDi@YU(koUIKCV2*)fBD?6>Q2GhY2`$w0(@~ z7tmJXLTG4ou0>oNZU4$InrbOKz|FrF+pQF;+O_0-`qGsDf~5tC)b-d{KUtZXwkzDC z#g;bK(KehL6INOh5wmDu_N)k|>ecLU(oYYX*|z%ij*AXLC^O5C?tkJDn^9(##$Hi2 z6G51w{4Xxc5oO&OJiw9%HEs;X8>2Qj;kGxA_E7DC5Vnag>M7SJj)XcLu+L{f0>db|>Garc%RZ_* zXCdXIL`5RtS2H~3PLgb--kN$Hkmpk?e^k&E3VG*x-Yf&n%NaXQckg)x zPqiR<9umoUv@7slB43xP^n0E%l}4o%v$G8RsfKXa$D zHMA;O`9d^h9+Z?>d)6NmhMb!)Iimvr4y*277BezXP!S@;W(Im}=GX8FS$$@<%=WA4 zFi4vqaic`(7&I$=yM#(rFI8|cbS`1{0OiMAuAj5iSeiduh2zUJl2Dy;DMhk32Dc!SJ|TNQ6&IdJT)F z_ZewMsW0@zX$U0nQDP{4^gG+7EWDQB(fN=pT^t=9Iox4|o`IJI{HTnxA)+2N`uZF9 zIjQ~RSP~O>i-Qj?_9OM!g+}b2a4r1p?U}QemPDYHDw1`w!+6)Y6?LwNFGbTP>o2(I zqqZPu&dQl`li~XCR#(JC{FPDY>v&8g8S*KLcHWtOyP@K(G80?%!(bt5w_yYx^2*1y z+$K%Bxi%YTUJq|LG&+6jQ*qwQWrM(~J6*AHdQ497jYqK^7xFGm*f8J3q+VzD!ym4L z2PpM6mo?T7Y5Te}@b zL8a%U+}l?msB|yioh0pP*Zi~bR_fzN^!ArlSNMyX(L^9c z$h1kNf9AY1o&~k2LsL=LtY+irofg|Aj`@opz0KgS;i#h@+z_-N^D zBB{|3B=|RW)}t0TlSN3V`NGiuKBFn@=o5F?JeAQ8A&t|c#-_4-_; zzp-?_KQ>188_7ApWR%fNBKn+R87WxV!JSfJUt_QpxRcJAoCm_wYYlrNvJhDH%VQ-? z#etjg0Xw3LEs=nWhCROjbkDuPEAU zHnqNbT75eF(ek8CXs9xqH^1XdX*Km!4s4fZyV|Q{_DQeo;7YkaO6wk5c^qoqxo+`k zu;6x+Gcgpg8~#o|nFIeV8`-(iP*gZ^B?U3>u!E=`v~8{tWi1T_e54nQl)g?wl1 zIO>R(Qdi%Z5}-!&0T#oGjFF%plc#xX_9X2{=mJRC75?wVxm#iO=S%OKk=HLoAJ<NqGE2(yRI+*j1T;bpo2>euO_a$H&@ZS(9e&D6%16>n*KS~Th04y~_2|pNevo;bVm-x|h)*I(@Ct%Mhhb zITqt}is+^v_F~_jD=NmnoUS;DB&c%liLs+W&N;4H4&m#~ijpDG*&M-fAF`yC0&*PC zjO$lgX4DMIb(JzN@PeXw2~;8|ZxKLMr_9d{bbQ`PYCyYjP6KHRZq1G84q2) zkxfCytr|C}ab%2~KG8~3phT<6Pht|@MSUuN*z0HzN=IcY1g#%O>gF`tdfDxA-TUv} zj>&@ew7s(5#DDV#2VRFe#@qB(P#KvvwvK8pt53!)@n)CI^NLUGJTVk|<+4Qw)0zx! zkA}|j7vH?O7Jwi6*Mty*z`2eOz$$u{{k_7Uk8zzxITMNX+vjJht+&75niCSWUW2Hc zwGn+{9i}~Q*V`09!|2$%A_Z!a1HOy&0k`VmnD09FEhVeGyd&y)aJu)2ZTHUco=4$S ziE0M4eG13$(eHJGd5cf2sQhkcf>|b4HRp|?#V=HyX>EM zjB61W1R=Bg2@b(M(I*DZ*8GN#AE=^*JNdPG$Rb^SfQoMb25b$~j)KZ23G5|gZBa;} z@aQt-g@FmGn;Y4r3oOr>LcZ{&sb0gY0^p3(v^eE|ed^m1yyP|J)DtWrwjGcR%1ZJU zIHvrwYFgdjjMDoXr#k+}l%gK>*xl7z-4*(gKh6(a70sDo|2R-+p3S1?MC^498cj{( z%enKGQ{SffLb}#~S!XSUPd}%aMG(Zbbo{NvjL=beR&SNfg=N_&$WX%ZW(qK1gVd%B z@n%Y0i~0zqy)5F!OYanMXNcX8jTo(Mm2rX{{fqJb#{an4eHZJMa|9O=osc!rdrwfu zuzhx+jur-01Y`L({&@c_XFEuH8aJ&MZVvozHsp+Xx9sMnEuqP^5>c+!twH-&Uhqd& zUWmSQ`B0-wOfYEGP1`elz}G?W-8)AcUK+!GYfB3GN5KwOSaWOh=FK#4)XZF6!2(*j z9`He5TI!P!g-8rCg^PdagE1}xpY>`gY;A4ZM&NdzaBh0~w@263wEf|ZB#d!y&SWSp z%hFmuXUhZB@Ny>ga2M^hYy=4u@85%5tNt!s^hj}_gr1k~{nK2h7PWC-$aSPlL^v;z-bnYBHgBZ`J)$Fy)HQTN!HhiCZ19RFa0CA`6H%_>cr>ekpc zBD_u2=^8RDWAW*aU$%}LlO>Cb@N4z80(*NIM(1hBZH!qB|EE4SB z@(XyM&e}CURP=7*(xqmDJ}x(Hrg9DTXGOt)hn|`^uL|v#{Kd4>LQd0u!%c7{*CdGc zme2tdL`|>JyrKBh`}=1Fl7E%zq;+O#EWW?K4Evprcr97KYyWdKnrnbB^e?<|G~}ss zjsq<`Dt_#*w+Y8qQUzFIq7C=v(A1;F4gB2XN4+;JSY$mj&J+Pg5!tS$#o-7yGyoE_wyF{oxxnXtY#y16V??IfQ}q zI0|ZLq-K9rB99hAfUzg|@P50uI&2!kkXbrGcM276pPAuaK9oM!ceWL1XxZG(FaF*i z+jO?5D((aZUt)LLli6sl8n63Ous&e*amRIwKRv0_)R;8*O?daM^C|T~h@+QfCf1#6 z9A3cn{rU`@^aeF*`71Oy->j0ATO?P8sdUd=`|{@1zCdpW#S6kKa9Ua$fBNg9FBS?7 zU*p|?oATNng*Qf(cJz~iol~XGk$m}*Aws>oqh0MAP`d^kEI=8sQ$eW%9U}r|B);1o zaLqKqj3_=HoLMnircwIj1&=`qN0ats&Q@?Lw>B)Bm!z*xHljXSmZjz&IbqMO_{=O$ z(y?E$#9W9i+Z;@}+&#g2&!R1)I)7iX`2!{)xTcAPa@u4h)X8Qu_`_NYEk zdX82ebjD!u8Xn!Sa>#~cy<_3G&YhhX%-X25P{j}oODq3V?tg!suxS*uvfN2_r_-lt z+8MXKWEodSRuYr+IgiSnWr#;3zIEJ3C8Y6?2Z;>2nwr)J^_D6kaW+_SYQ$HMSr{-x zh1iz_3WaW^9Ow7;NKk!ymKo$u@O|#@J^K?y_j8gutV_Iek5e_LbiD*`s{Y;JYTM>& z^dM8Zr{}*;8*H{D%i3nb zjePjQuyPEyfD70Jo*R@e+xXwxmy&B{_UNwDLfX7g@WZFydmejw>IX$H+^lN>+!Q!~rY)a@m(bOMZO33dmy*abqoB~52biM#hAKg6qdS`$t@6@^L zO2^WdTdDQ;j9}Uq07%4HV9^bIJCz=zTYVwQMp*HpE*@uf>PTXt7q7-ln*dXQO()Cg-y}WT-UOceH&ZSa;WrOm-q?ZykD8*wxJJjWWcT zIcIq)ZMM0#+u}XT-wbN#3YDF6{qL{mufCg0Q>86mw!3X}<2BTj?Gg2zGWw-f6)*I? zcE=v9#NoNVK?gteL?YaA|7AUvHQP;;!q^tK$GzW6$w$<0Z46lm><>v~ zcuu_~iC>ueJ|1KJZ1zq9V$AM-y2b3WpVM(Ofe}+0gY$D=bRW2s?p+s!^EyrD z4iFjc#;wk(&ZAc$^t*!ijRHwUZimv362p`zl_;02qp_LjGap==Q&OLLes>5>xk86G z{?6X{hqJoBOlfgjDrc+04vYQHJ_q!;uGfW z8hJ&+`cpywc$yuA8rlzIuQ0cR%>i5SsuLuUVL<3 zFK|sDF7@nbK6kFA_h(fD$QJOhN7 zi)Nf>&2t5`Et?|JJ7G2dml^Ud{7!Lh?eA2@AEYm;Mw}s4xnmx=m5C1D0dlg)7H%@IU=7}HLD%TgX()}lNSo}$Q_eRP-i|>iM5tv`nL*z>m zez#fLvQ8*YHs;-|E$Q^sYs3Zd9hPKF6dd=kd;pFv)2ThB5Ux zIvc?dMEK$Bp@xhHiI3Tkr)C!XL*xd;d1_E>k={eydFP4Axi~kHM(!%7bDl&9`R^}* z%^2_+!#$Sh1}_J6-TfUN^}Rb|V%b*Db#LXDDWN(g)8bj?Ow8) zj^XHpi{mNWJJPw(Bs!=1>_OvPl&;Yz?dhI z*2$O6X`fKf+Mdee&ia+4y$zW;)>r7U_h$E^&9gB(pk{EXgc0qR3{mXdnO}xJZ0+o*Ew?LG9O31galQEOx7#&JLY*n zNX=v=j;NTvHO`Lb>6FLN>lnyeweQxE#|5W+yQ0%q?{Y6*+WMR3_KixM-=J68JN>HyJmhA6 z*K9N^1uDTb?7yf&a7CWGFhe$R&5+KHor%Jy88a(u9Tgy%N`JXfQR3%p@{%5rmscnb z35jwp2GM-@bJtd8RhNHIzr9Z4(rqp~`Bw1&hxZBAnI#6@MuPfl;jcXYG6Vh1W~>AtCKrb8rWUaHA0*)5%K2}E}m8dkn88OFVMza_weBdJ9L zTXfw?hhO;BbI)_t;Nz^B9w~$8c~!6~&EKg8pCztS=FKj2I}bT`X^D@ioG)3{niW(M zU{AdJL!?MMR9@Mu=8C?^@j6Mo0~6%*B_p~$L17e1H-Kt}C|K0_68b*OlW#El9*xD0 z9VrdUg;(sZN|+9%g?1wd9P7`r{!~rxNw(}z5%)ysP@-`fVoeQcGpDKX?p}n4#|UFc zww1mqboIpAOUqqMumyS&&FFxAuS zoh>-uYCHbNO-t|wMXFi$OiKkdKzKyFMdh%->$7wKlHU1p%oqxa%?$h;1XgfRrg46z zg}c`S0?vY52MR_*FYT@c?~o~TAN8f@O_cZ%;X**;kXFS;!2yUMR7V)&A{mdt6nohtY zr=%#fk&V(W{`ndCaqeBlvvI^0lNTq4qpBw;w{QwXMKcZaORL>LlHpy%RrI=(IrZo( zgZaJB-Oj11t6)=lTKjyWS(m5EV5#e3eHpFr#AePmuLqIjyYz1Ccw}s8ET0kZW|&<_ z;roTsorD>e$^yXKuvOjhTuuhMnn$>>*@~!cAt5FPgl?&6%Wz>!D{rA~#eD~2u)!&3 z*UYJ3G$+;+(!ydXBM2eg-mHQXRx_<(M?SxAgh?Ejj1o3~zDk zf1BS8FdvSHf^jG7H{hpCvuE=e{XXtk`)BECUy?H5qjhh;JNy}Q>G!e@j3lv6*Pgg2 z9&}m~y{04Y4(`9bee-W+?&kkLAY2?5)de!$0Xm3j-m)z~=fNd@1l4?OX)wF;*g|h42li=67Q?->*anZ)5n;}Xa$FE zhTd2d0hE$R%C*>fZQG0y!8{hU)Dr348bpONX-~&4fwc&1 ztr^=Y)dFX-M^1S+L0IGJ3K+*~PrJt0&$sxx11}{j>VY4%n9e|m;p08oG}+i;iWuro z;J=g|ZnwKW)e>}e>2UiS0X}#`tv47g^;@vDs#t%lr;?JtY0Z_5Z9n`8-RTEQI~8VF z$JfPLDz5)cnW(>p!Azeb_4LiTuLsU((`VJ(aw=ig%R)dNN(@#OJH^%r0OJtj&0Q}8 z+aHJ^3DSS>f?Sxo7EXrDm0TM9m%-CMkq{_*a8R z#}Q|VLb^`y`Sd3bHpu<4jBZJJ?}a#bF%!RjDDQ%sCHw-VPRVfC5TP(@w!}mE`TdyY z>)^=6gz}K)0Pos>LcUpgr9ely(++z@zROi`mfualk@~^=F028E1U}yxPSvYIZQgjW z@N23XDjjG%7-)^Ve!S3>-K(Iw*NgtQel~4IzOa9-CfPm=j$vI4-=OvHf$K{&s7R(U z4+!8kjo5+(@>a*nr=R2=k2c(p)~qnB>Wxt5Q(rJw^Bs)8<1UqmY=bf%TlShgSNbsW z0IjM}@XM8?2lJ`-@>32Z5*F~(P?Z#80;Q+RqA94fMNMkxozbY+04>Fj^#bfk&1*1S5U)>H8i@BLKyHLvA{U&IJLC{laZ zDHy^#?Rr@NH>2ohD1o zAql}%hW}gL z%7j;!Rh1oYpQSqO4X#u#6mEEQQogg?XElF#+xUNfg+J$?t;tXsSR73XNdQQYfWVX@ za4W<2)8Kbc;Zu(GSoBr{0EK2hRjl^p0s&pN^Y)WX8jnvNe*c;#{BlS$>x};<+x>w{ z`;=Q1Mw`70ePO&h+&OtVVgJAR9N^TaN@B<6R(c7dh zE-nYDm0hTnft%v^B%y1<1I{?=4yOqc*65KSvHJb%HhvUmKYl_hzgzdhxLL6>E&0ZD z(55jz|0Jgbe{?d;d8!0jG?F+aXCITk(aTuwbcyv)U`c(^+=+uHmt?`!`;3AI)YHU_ zU{a>d^>4pr9LqGYZb5!=MN#^T%5d91Yq>ehm4Y}gH%nTi`Bc(QxZA$M?HJYYJT-dE z2e!0Z&Wa}`hG@T|ouZ)kxJ>(mzI!d=EjD?gAgBpnX{%RA*s2_^P}$#NpMiea>2vkJ zzYGr6)g%7<>pb?ku@M|%ciM{2K&B-5>3A^lXE4(7dH0nQy#lNov?3{&VE6PDLXI~+ zr20*^W*oMEb}xAI#^5aio4YEvr~_)VfgJS~PC={zC17f6_iK-H$;xMB@Vc_GTS=sy zL+^rKby7jN@n%o+wN5i!T-k9fOUs7Z&6zCMMmu|y6Hg?PY|L&tcgr-BRdc*UI+~W7DCH#5lbglV4jtoOz9O z{%)h1g0AAdDm2RAEhGdvR6fMHo0*IxSA3(+8g-7Q%|<(E8{}FVXG=adD&4{i_?T@s z&ZjrcuaRV97u~mWgWo=PK2uP&KXNMawy2x)DE+6V?Xbu1DCRG%v&YZXi6Z` zg4uM<4}CFv98UuEZ3N0?fAs!|DfnJCjGCr^wvac}Ado zpg|;J2+W-x@v(Me_BpMPFh|8WlEbW7a}quTCNNGChK_&U>U@31{b6-zCp+GlSpq-?N~X)2_V1!k$$Jn$vQB10P5k zt^+>jPTRS2=P_tQwymx3kMgaTFomiXLSJ@o-E_+9 z9Jvh_-^w4-K^9gm4caA+Oonu5E)ja!ZY%&<%fTRXEd_q>9BW0oLDX>CbedUWM=M`RCbSTV3VhqQj4B$f7 z*s5bQ54-+ZwRdI5XhTTI5o+x;q>oHASSBb$0qjRM4dzu#Xkr=Ej5f4C-ryKIPC#He z=i|ux-0hq0-`Gfr<+-I$uY-`+k(93wbUo)~5zZh1yE zbX3{cR*5fn{DZtQ_V_y)r6NS+XT_|KKUZKgd)}<^vIfg~2UFbjNxe;L-`C!LrP`D2 zeN9n;Z1;=dTl$nld;Pz&;wL_!X8-$Z|0na}*V<9}9`dsXoSBukV>2>pf}qW<#FKy4 ze{~@=lS7v?7E&sD&~q2luC~Lk7<4UA%5_Sq1>26_Oa(-5kZ&^yZbGhlbSwYu1MF)$ zB92e3xpk%}LkeFiCmi-9Nn-m0Z)fLrDe5bQnW^bC-0|H!G3K7sh4Ax)3 zoeuvvn^vuukLaGCLFi4nsuB*{cJEf7lT_#L)^+HUvfafP3ks zuX+n+&mQ4*hS-@Juls_fs}ANpk>4M-Z%5tog~Z#<-sSIes*t%BdfE$Cakb;`S3XfG5*c%u)%VUIIqfa_ zn_f3RxhmZdouFEiIF^r#@IoLy8>`kTIokrer@~sJ z*!RP8Yiq;;*O!vL18QiG+l?XBJAHY&K3K1K^}(1DGX|_uVHj@W|G)bNyg{xsHf1X2 zsu=sMoV!fB49^{!v7vEnzIzF(?MXkHSyt{u zMt&Sq#L`xzj#v#(53R0$9ditIV`Fpcwua0Tp&a#b^DVYbIPTWI=|MPU)$uyW%~qbr zW&Exor1*Xa$Sx^eN$_f5wEG#Bq@|jPnM>~`)kz`;#C8QnFsgtY15)Z6=N69!{&rK=235wIdfR3P#TKl-LBZsNWfKuC{gfg6&N4bp{K5)olB)rhVT*>Vm)Q(TVDjDhpi zX(j%k?aetSfa;sMSNYA_xK!c1a~=`jd25Se45&i1Yl+6!*!#$-7D_z7KdtkN{F6~wwQkuP7Xu`f@$GmuG z#;i2ZIfRGWODkHaBnsS}-9hJ8h(RZTH7h7Lji+o^@noeMSvJ(=tK#lRh72SJGuCI+ zGC%*!OgbSWf?|;*fXZ)^xgrT+a8WfjCb(y15u4eeWcigK{Cbw(t(;I!G~+huG2>ZV zAnrDZ5}0(cV~(s2_nb1+wNZ;c?OlMB6N_rWZ-?)rdeCU|yiulY?`ixN z(iyiV*csiRXbu+6;}|i!`n5j;^)?INVO7imoHGe%T`zyq(vsvLDSbEJLb+gOtW~IU zHauZ;jK-|@qsa;u2*v7i(p0U|-d!K+{~!6iltZ372mg@EeABirpvN#q9dohJhn}`c z)3_y=ZJP*N-SvmnlW~eZg3AfAXY-PKMf-D=b zXy=7ry*j|@)%Uf6KP}u-Mr9}x(oGAU!8s8*xi_8`a}xb_6<*$L)-nR{%f22Y83GL$ z(uHhUH4-DU`!_f}F6AAHn+yQe(G!w%#7(dyVNwhmX)I&2!`_74n-$_m@2NC z2d08|;@;pbYW(mpW~os4JehP5_rZIv{XfOU1$d--)b~O$lZwZytHW%Iny_FeD(3+9 z?H$lZMa&V3$6RXdQ4Vitr8r0n1|uYr1hU+)84^-=Lg1sxIF7Ex{4`hlW5EqGU6OB{ zTy$EE`poB{csXyV8F)8CxtP%KQz&1Wyg+}D`qtzX; z<8j~iuo3UpU8~;Gpth2)0L$0^oTo6@2zIJwa-F4FXxHnf`86WpA}PQ*YPkUSC2PJ1 zD*i>oJYSq4;8bP`ihU*h_SFxh_kXI=e}bz>lK8=7Ax0f>4V--?vrQDfACT$crzdRw z#nA9ad%0#=^Q=myKj-uOqQi7>h=|C0v4^$NykyAiS`GB!olZF$YA@{XpdOi&qvC&$ zN%I%$oj>1=pntLyohf`4?8uvYJt~`4>=R=$7kp0wvE+_ zsS~gvKGV4KR|_?Ft3KnQ;%{QjzQn~nxV7c(=ml?SxAaTGNwyrhd)si8n!t|i zo*1>sC?$YbZ}z=x&f4s*RWBiuhoie{l}FIP*WAXfq(7z)DRPYtJtzeHw(?QUXA0%xSR@r>w;OrZFVK zaPIuP;;NFC$~LZ-`$;cyQ+|f;zWV6S4urUi0xG}n31~RBtm;fIHck>eAuRYnkX*6U zt>LSpl6r?%Pl*@Yv6g->)dn@Q6*#YdDEtZV&U834zPDFo7^;q+MsBFS7o{_;+^J$LL*2)GW>v652M2QW zR9V@Cjho_QCG57_i^9<6D}S`N;upydJb-r=IPIim%GmL(-YP#J*$*rEcBGG;sYyygaK?en>LeESi521l#!8SVc z4F@!u>F5eaB+Buw;ZbX)opAY5#LO36vXw*U(k+L^14Q4rA9B7xB|TnYL^^f6;e)T4 zfB`Kmgxl-*utu|!EBwXN3`Gg)dIdQi%$-hT`MKog(0V?c&3%Kh`7&6*-}%v#d(eXL zx_6atvKt=ns-sOkpGa31u$30TYrJx?E7|acbs|5=CtEe5OaBA@)$U$*ceOxnOO9FC zOj*7B7`xa%{K`zjvlsf99m4sy(SWVK)MXFYPPmYP0H*r@cW}h*>UVoGKCfPA_F99! zLv2aqLd8|jCvI0@L>5@&%aBHysOEdav{eP$~r!hMS7g6y?`P=r{m>9AyK|ey6lV1r1%8c!DEmGP_1|^N4f1G+!4AC zC`JvXE8^+i9^YI4#v7aP3$oPJxeVaxmWqh)=Pb5u(9z19WO;JjP6@Py8Xq*oeq#u`QB9) zm31hk<=t#)qpGm`(Yks@^D9oGoJ0rr_QrLdM(-VsS(PySWn0;HqsY`Hn%;vt>u3T< zv?@HNl)WZmA17AP>6rhJL)YQfto1j_EM9mgPj8^_#!)uS1wSr-&5C}jL=`U%gmTS# z^G7-zdHna=AX`|xo&f1x@}E<%a^Qac0xbqRks(`tS;Ko>?@tD>9O{`}0@zn|&Ivre z+#X>eW!aN1#HB(&XP0>_7+gbt^9A2>_@gF*NTKa1g)Z1QCNoZcMo@0#BQuawKkr7W zo-5W+u^#%|1h?~fi@K@zM|gN{v&-Kp5!?Web|GdB1-57Ciix$g6oj)*rUfXTGC-KT zKlqb+-DO?mrijs@;M13>{}Y@L;E|qrm8X>0dG`H9nuNBZG~en}@&=;*#Orr25&D&U zAx7d;Wj1`9nyT;W&OXL|3SGHQB%59DH&+wSv%A=X12K(r#@*qOz?^92~M^yXo%;H3+`cGLDxzXC%Cu)qPP7lxtp|N9iH z0X?RxyX&(^?c7?{{u&%)q$ovGsDbMQAg7f0Wk%-mSiBG`cbu0hBHRe|YbnJ?vG5Pi zSD9iAm{=!|sxT07RLeBt-jWs>2KFza<8wW-l^1dVWJy%rag7`ym3!El^rSQ<9Pt9g9Tf;jvg(l z_xGH6Sx=MS=A1!p@S@61stNsp>@>AFz2+UHj!wK>PDq}=Sl1oq4MDPD=4>M0^T(ZW z+;aH*+ThV@#GlLxlf+hqZ~Q}Z(%p79Z_;G_<78ipKj?YpAOA(V3q8Rj6y-i(?P+p_ z?xs7nK@etsxdlCLnM{n@k%-2gRu`>dMWLsOwQDBd1OMHqx#g zV2!r1b=}fTlh9{2&3|WBCKUTyz8sumg`4KD^XoLZ2sV!I|24Bgo-as0l7gU;rSNG`eWP&}c>o;var{)BlQ&+%p50V`HMF_u9!@ly`_Ja9MQV`NA&pf z;#uD-GYmw6rcf2sw&PaBWmc7diKoh7x-TSnXj*X!nc8=)TrjO;LF`YZis;CgoC4ir z;QC{6BD%c#Gl&ys4#Nn&f@bl9H!)sdo`;&TZw9`3qAw_U*k%B0CXxS=U2tIdU5^61 zyG2E0hsaj^x`*vFS}CEh=NB0;)K%X70toy{x2?>lmbJRvgDj744Jex_js#sD)5D2@ z2dK`*7Jy;S;+oTawjX;3Dmp0A61!fhO%qIaKU%^5IzGsaDK`bjGFGGU*5 zm=S(+IED(!w>bhZ)KNHw?L@57U{#%*b?a2_EiWA;OGh!h9DFJ~8^am>NVW@>+}J%c zo$ir0bA-}b!9gjVZv0Ok6n$)pFF2(jD!~yx3fJ}6kJrD{X`tW@kA~y;`Fdd~v-(1> ztY3)0^ccf1Xu=lewXul$?DAzF8)wZbt^faW0gvuKsX@sVSb+oU#KL-RbR(=v!!X+S zIBoL9$G(Om-ust7)1G?t^Tdl?LuHuSc)O8NX4}rqsX6YVKxgVdW#G)*mS#avPAC1n zmnSI@)8yP zaKCJo_@ZTZY33oca96gP?B7tw@4GKJUVW1h2yDX{b#;Ytmp@ru6Ov#4$w7-Lna|i& zYu@-RdKR>(7@nyb9}?_uk722$lyR`NIC`A8o&1 zE}lh|JzfJxJn&Q-nw8B1IacxV#Uvtjs8E4$Z3`0wA%W-pVX0E;App2h%rCSvUugm+ ztFls;LLeffbPKqvD@8=O<3}iQ+a3R(&g=12d$U9ikRuc^%}afyMi{|b_(|WBpXY&0 zf^cnAp4N0O4b=$pz@f-hyq1K-+DWk%;6E}Q$M<@NoEE|xZmfw~NFAKsbm=k++94l5 zfBV(xx%G=MZBqE3w1YofTwb?-XISaw_wga5G&-cFj_sT7SR{<;`)NyOd{XBrRVD|d zmOq(Ui1x5F*@I5bm&E%snjW+Jj|NOH{N54v9j3|#a?f&>=qnCsY8EdWRvKKC zjg#lJq~__=eg1t~t9m`b0RO{w`~7#`VcW9DK#8Y@?XwYmT1?L?hUK%ZDss67?r43< zk@hqOfOFUAUc~Og5`xOrt2;Fz=1P~UZja}aRPi1BmalFG9Zk_&=&1&1EO~()8g>pQ z%C@H~BQW0b)^`%9YfmB#65#e>PaGE5wx@RrJD+wG-MY*@k3Y~`{k(&)mG|r8X4GDA z^&gf{S4Bu&qP)6R61nUj@mlM<>VLPU83ZvG$iC*)6FV_@U(3z zPL#^h{)m6bXS!sRJs9~*?w;dUF7%vLeq}5C=lW{cH?zDWUfv4s_|*LoDJ6>{O-=SX zAn)?Muk+0|+;vkq#OXYxY-!vwybv8V5XAQ0)ea4Q(4q4vAm!g*Hq}1Urn7Mo zp{qO#Fk`>R;^6_5m+yRd zkub(8y%UiKAF4a6f5|2*epk~qztatsW+cpbs&B&1X<~6PK7J+RMEbaE^rLN8?pmry zxlSZ;e`wzHv#0sTTpzQ$@|%ifDlu#fk*~JRPyTu(Yp(Q(x4I{av7PD|_!9Hv_Qb!( zVpnXt3Yj|oG{B;$^x?O_h`guHCq%4hfc%3>EA2m%dW9j+B|y0g5YKpb`&XF-?P5(~ z6v6r8Y=Vb?d;;%IO!?K0^8l;3P;g= zytl~t{IdCv*2hjeyJpJJ=VI+iT#7s2!e}w2R9E(s1`jagvOHRv_{qF}zU4Mo>2>2d z*`j?hRmmkdf7VFG^#drxG!WO8p7iZO4Y%^b{KNP>X_*ZeN9C)i0Bw{#8A;|om#W`O z2!Cgkqtx!DHyZ6+eBO!Tm}Ncnr< zSZiyA=P~SK{XqLIv~;J%uBOJ!ZNDf-_LGAAWFcPJI^~5!OEI~iBjZ*?R=;KcZu(kl z)0x(L_B*b+WNer6s>^}KKm%#TfBQg4v-b}Xzb|XfDD?cO6u*PM5o`l+nEk>SZ{{&d#wM+8Dw%>%HDw|8Cpl{K)E+ zVikVe-^nkaO18vDhde<9154k{D?J=M*1=)@D~w~R@P%8O69wx&>1Oiq z+HKt?bI(JSe#1{m!980aOPoIONHp|D&nmdiNO2_zTj0Mm`>2xd8e_cFMj=}Y62MBu zfA-r&CD5M*G#30mIS{th-;!D<*08Lf(~Yz7IWMvj=ls;lZzI)_op9-$P^4ezu2JP< zt`wLr=S_Ja`^M-#4M$5@emBYQx5_sYH=?Jz47hk;_xI{$RO%nE>o4$U!N#8fIq!9g zqv+luk=kv=&%VMNxBHPl*a66`HE`tFN1}2m3z7Iyh%!|9eLYSj^aJB1+URkK`AVaR z`Q-s=AzQ2%FU*#(VDsb<_D4=Zv$AEay*ra~&A=aU)tZQMa&s0rT3?Kv-XzG+cf|iT z=E~5Jt4XTdbNu(1#`~iA)40kn{OTLxZ+;{({ym1z40?NN%R{{6`^j=;0~^I%HMvbp z#EuGbU(v8s5vIRu87_i*K)mR*+H8y0{>0OTed3LV_)G1YEm#h}m{iWztT_c1xWV;9 z@VJbx5rw$VKQ}7B;5nE_nmPr}^x{Fr=b+5cWqJ|od>)PpId<`xSF3Ws#K_x54zP9K z?U?zF{*&thF;KDQ$#nE~)O<&h{E?QYI=_sP1w7_P4)1hls9p8eC&YHGb$E7euR4Q~ zl>QK--nNtfI~&0^Pxk(sFrRm7yhl%x>EvCbcuCIt&+EwYq+8Bk+L>{CRlADE-6^>A zuIiXtlX3H9YA2`19J)24d#L^f<-4nmeq^s@k#%N5&Fywug+RM{qd9(HLi!x`Pv!Ad zQD@zC34n+DzPg%6=?>=V%>!I_k}?5VN3Jo6X=ElbiDhuKFyA`~x|OdW^*S6mZ$5pP zJ;{n(&{q&$z-pMzVDN%)h@*)zAn!5b@kW_sCo}PsVLBS4{ss#fal-Y%u&+R3ic)8Pxr5k-4 zMa0132edIOy)3_`=6~)pU>3yXS{2j+Fz)U_Mir@7j-HZM!(h>=EoCo6?CfP)J}EFM zP7cm8V#0z|#wVxg(|_ZUX#7@rA~~5-*?Ezp-~$*;gH}evh(qO8JH3LO$eU{par33` zG>pT&+K#Rs3488NpE<(FzZJ4z+WhaetQ2pl$U|%1zqmfDtQY)yY=J-jf^RC~VdW#+ zN58j}S-$H{fj5f^)UsV*etP;0x>oz6kyb^`a^519-=Jk8UQ=fvp+Nmkr}5pdm(_n} z2iM%KV)4QZues$=@@}#1tWxd#_EVR1QKePcvVP?zu6OoigX%_oDlH!rrAOd!alGIf zMJZ@;m{B@MJ|bB-sdTJ4xf6ri`gkKT>qW!dQ>MJsiaCm!;I+C&p0W+cZ(}*#&Npjm zBaEYwS_Vu#^Vz-EQp+j~`D}RbnU9u!V&RB%00Qp?R-o9vM?4$9iXeukDC_$wwqR5q zf*&{R0Zo;I?m;Vk=+xktrK&B)ChpE%sgq6`H&YG#x6k&a3}76q>Sx}vqq|@-V|y6} z%&WtHrk@O4%MbYXn0*z0!$8mN8%d0rJM&g3$jydQ&Q$~Zp_}5?G9NgY0OYUHpysy-Sv+ez)QUEoZXzeoCdjd@H!0R=xe9$rt}n zl$iC5i5b~T1mn|n6wO)j@xvd>m&yYJ`L~Ru$(HHyv?1QnUX`gi8Rw{Tx0|JL_nZyu z-nAmqY?%r&&09P~N@cH+X9q>H;I)wH7{DPz?RGIk_Y$7ZW*+(y(p{48^T z`XbRR#VqsfyQ~TZx3qDQ@ax*$^zu##)Tj(7HEc0UPjTl}yUQ->y>IcuKeKt=l?bsd zu}0~r=3&L3&nAUuk6)lgyMC5Wrr>0+<@BcY{(Ee)P_MuKL`caUoZ{4>JUSYqur)2psgh5#K1xUpJlMV?KiiO#V#3 z+5gCh|5i91QJvg%=*@5cOwV9jenH|S%^ro=YRy2NZ5bo1s;)HlQTQn%1Ad+^2V;DX zbdSI5{oPiOJ$)nP+A4Q|R$=RxhZ=fh^lr{{x|s~b@u%eZEAnUV;jIFfni^;9XICx< zhvRP!^|XJl^U?lOT#LYbZo0lI7~(d-pC>=}=b4Q4$bdcg>%Ygkl)bVzDc_SlALf;p zE-9}*{g!jYCDx#OU^aem(x6-j%<@kkuSGrFgO+}+82?1? z$G6YRaX>=Y>6+lkBI2~%W#dHN+!uAqi_$FBc$v&gL+o#g8*+h<2cF(TnxsV*H@Q2O zH+5cI89411)D!m+c_uflZGkifA+$sGX$d0setxkYI!RpKb#cAuuf7CNEQH+Fgq9Lrr;YLes6((ujt+bs5531yuu_u0Uw1fQ*)4x2S^* zw!iS7CXVe9=r(m|+W8=bpMLdn(1BIm?~~bYcp`kcHzO_`H^_~<4XZLu!li}UK1wB5 z2>eyaxKMRIQe>xF%J}`ZrH%;(bNYf7O3@N_Dn@~mQ8f{56k}yq>XT;m{NH2K41+tk zY6rywVfCY#yo-lUQRJT*KDCxx9~&p!h%=4NUZgF5Zs1oH|CwX3G?OfrnvrvO>iEu` zQ`|T!GmQi7z?F+VYU}2vey1(oka{eUcx({#a9xSH8o9G9W$w(J)rz?AB6GBt$DpO{XUS1xnH*wEep8LD?9??Z< zybFa5WKqj=sA^{Vj}H0Y>s3Fp?KCj!DFG$fAk*~GlQv#b!rEg9S9V#a+w1$*89(wZ zYplM_`7U7mOlFEZ6Da;LXHaL?kPgSPRa_VK8P121GRom%?4&(^O>g|?_B&$mMGFOf z#h?JN_NyQuGPtYj09~)1zf-5#Y%st=fT}YB4YK1RRe>c-|_dbbxf)sV$jc~LR|aw@?~FZg+q@7 zXSDzuS{wA2P^@^(WS-*aB!Xe!rY;<hIkRw(mCYV~K>|C06g7pblT|J=wA5)1pg}7l4SOn#}Y5+l6~CQ23ucpH9grd$|G` z9N0BQF1VpDVnguUg|A>;cVyZkOr%;R^u|Qd3;|D%MuS$rRQ6;|&dTbIgxO2dCMl9u#^we)kSK^pRv~`jN;5aH3G6!joPwYEPL(N{LxTjzx zOsZ9J!?bTgb4Cj+tK=td^JeT%%il6cQ_EHUkZzfoKx$*qI2Y!-c~T<5q&z>rn$Z}+ zLi4j(8ivj+lFUpsPdVQ}yN~A2XIgeo7EV>n9KH#9THI|W`?C7Q4{g#mcopbl-$*E0 zBWnR36ilF0zjo=xdnw3@9MiKc8LA578T0@%9BVoA@}emII_1s^PH6J`kkZS$!A})n zi)Zq<7c&Egs_wg|V7T}`xo2x0B)@gW6q1M672CIC@s%|FWf2U<> z!kKTd0dmU3)G5L{SW~=y%I{|rhs(521etG*8BrELeLz|YWAbOH5gJL{%Cko*gvWb@ z$$?5g%SxRAH5G8YuN8Jb8<5-xA+a2X&Cjy6$qb&n5HUzgg_yG~(1I^9bSjxC$If#% zBiDHtB!>Phw!Kt!|2{#?3X`f?p)%z!Yl&133TS|%F+r#K$G-9hD?S+`jXxZCl076> zaYV}Ry)`xzbzs@}B%Kl{djS7(DNwTJYvvuZ+F$#SF2R1T0W$*BG{lA2u5i(P48^>s z%wu|pj-PJaz2FA!>doR20DTGdjp-k^hZ^MwK{C#k)>`Ze4f9V)i2F?_q*y;=e#^nk zIqT$pV*Pt8_Yp?Kz1V#C%*^OW4Sf8uCDu?nt~w)x z5bL>#s5x4Bh?Jp&d>Pb$+wr=X_IQM`kwDyQ$Y{y%C@z<#UM|K(S8S$#2WfX`Mw)?DzIPo#feWtgM516iople>h!GZ!$CGnXD%GAUwPqZk$b4E1wy z#{H9Zrvv455@6VW#ZR=(ww%YzuER$ZepjtR&kMuPhPq9Rr+?={K!OPT z=~|}5Q>oqph{B7M=lw;0WO~W`WQP*ESR*R71Zy`9Zgj7JF>IozSk0apt~zoHHh6D| zbzVXG4&m7g6anssb)Ijq^5q9`5+gW3L*1twzL=Pf*HBvsA5B8a%V=I$pe|e+y(E_4r?FQ4@z$Nr+tyzytC{lbG)2LAUMr-xyn1PXN#rLQ)GJuJ zuES2)X=dHvc&Rq2-j>FbGW-jmfmk=M)8uj`f!yCEF8v`!!|55|zz+ z%PCOBe%0s)@|SOK8Rr&VWS?p8r+D=$Ikm|bq@8hfc`>9cFQ0EMe0LWuUoOq#W)L9N zF`*(XCa@sZbht!A1~{2E#>EW${m^J5`W2m-*n@ z<4GF`SwuKD;$Evn{8!>S`^LhnymE$9s4$fp;~wrG9%1Dr*HV79qoP8{!m@EC*(*oT zRPj7CXQHaHe=A-b&oSFkyYMkqdW5zmn^P$|7r2%lxJ_A0?-#9o@s{x&)Ll!1aW8XC zjsE{mM|lXS`$qi+?|3UkZ3H&bMn+^@+7Hc;F+dd)9v%mfu4sYg=;?&wQoZWmX(rgn z*j<0w4;mn!mLA#*nvw(JLAoZ?f;u>FpGBq5tR_`J!8P4bA{MIBwN!}9 z;Y%dvaSVsqaYUg{yRMYO!LfR|Rdrp-W}YqQ%zjuQ=h@Z|^Tjj8R8VK!C&M@EQ86!Q z{@aGLKty;MyiB$65(NXbZbY(D)^-_QRdsePTyY}GmT4wkr>Z@(=W(@_xI6=hzyXSc zsX)eVG}IE%$I#S{_8}3NWMW0#HoQLyP!EeU1ag%omu6Ft*12#@$m|Yr~2+e?itnY!oN9r zTGwmy)z}E|SgKP8S7BYN@1-uC_jetBy^*(h4Gwo$+QM9gqjSq5;DO+BzZ|fjpqTFQ zi~PbB#RvZ$Q|GNSz0#asrsVcio1CBNLeBJ3B)5S#Ie^n|adGPh7rh^`Ucrpj`IZMRc zDk*SJ6Li#_&0kzmsxpOZSQmP$(y4C$&=6WsQ=KQvrVCCh#YtI)rObRvE~p!iF->Ag+UK0uLc3?0!nr5Twx9SDF@%m^)(zP9m83{zIz?zVnM6!I@I~k$y5^T5+*PbXe#W^r^H1nFjBr|CI=caY| znePD%muQCcYnP>UAStgR47gJbz?C>*tq*1LujmUM&vHtj{y$evf$jxH+E%A=%{k>2aar|`mQ^T3C|Z(W1w z&Uk22b&9R$iqYB)z_3i8uTS_r3%VA4fYTZpTzEkoEGNcc3MsJTBpzOOyN^EJ*lfg; zZq)g3T>Fa%i9h@|WRy1hFV)VHpBEni?oRW@4MC5z#XrBSLcm~NNQ}+bBxRbU6g&Pl zg#_ar&7qLgMV`&FcH3<60Mj1W|Awd1M}N@bV*SnThCB0ux)Kw=YB=-W1wTOc-@OSH zj*1=?so&3VNE=?w{&@K#WLiX3UPsMqcvynZVwB)+dh$WoNjMNgxMO9uDtcxD^~U^4 z-ftntyG3F(THw^CPrcspJwh)O2VV=fJ@zlO3jIokSS30-J$5gAgrDOp&C`5!Uv?(m zhH{{2YjTpnu%TPb#;H!){)OUwWEH_rKII-(a2IUK4L#X(5mXITroXtXs^{`y7phi2 zn~=}%<<#8U80U8S6nVQ~j&uRH{i9~vu2l%)PhU8fRia5qqb#cq!1-bv%N4T?p}KsY zs?7u&wT54{XrWk%x>9-F1wBde96rTCLbi>@c!LAW&*-5v?soNTZU7~Cyh?f0zTO(I zHHzGWy%NG_88PNt*iZa(VkYOG!Mo?lo$!W8FXY&sMi+?~;96F$D!$Y!dsQp^64L)v zVm2tks~yzaG8u z|CG8HMwB%ZCs=qd#C*J+if*MQ$fT;FH<~^GaaGLAKIixSGO{sE%E+VRuo(B)WQ>`m zd6V-KOLc{tQ$n+qsLEi)_1v(c-3)J+M+O1}dZ=S5Kfm3@G6{=OjFZ1>5JmtPDD*MW z%F5R?vJoQp(F91(zA=5n1}|+<_1wm9t1}7GCynr^g(1u*(9{2D_MDO$8OGgFHgVfS zG1ALSh10EdpQ~RobMelX-8J?q#5mlexjlL8k`s%q?L6NvZJ?xDrnM$>>(@f3%X1+u|}qIp8~S3edD2Bw0#9Pvn` zycG1g@N;)2Gbm@XnQGFex-0y9#CYM%`CPk@P3P-{=_!9&3gMdL+9%^BgR{<6vHfHG zC5IX~g~3(CTn=JBDv7Jw^};t|4>Q+NQRl&Ak7Y~Aw`A#faBU*cR=uD%VuShdcSc`Y zME$TCHmOLWK6upNJk+q! ziO6_>7iQaw*kMG9JyMWbkcN);navG6Y}Rl9tREAWy^Dz5J=?lO8r~ z5}^$k5C8*u!!t2oGg!RtYQHkvj}+&8Bgey|=gAgF>h0#tGzexf&=1W$IwC_Nvm|(l~OZxYWAGoGT3rvrJNpd=8eDIN~AgDt*e;a@2u_l zL!}7rs_b^s@Pp(H*_cpwcRNY~iIG?4KB~yz{G`nK7wc$6lD6hV; zjLUgg`Z&g@Pp+31nA@EM9+mYs(;pURcvz&i(3RR>K-CUUM|N3fNnZ-LVPCYwCa<F)z|-z~;;zs>?MR|GgBU?B7@p4m#8rOST>e_^rW*&E^3@0bMXq zGbGR(SH*pnU;$mBK;0c-JV4I1W&7+zYDPnsFwsCuxTbm1Pf$f>Y1JS}_{k^;)txz$NIe~FD?HLX>!FXpDs|uIdDW>3X!?=;* zu+wRzR`*+9?jikgG=AxpYXYFubX~pYvhKl|fn1Ue!A;IrllgIlrUpUv0kTXyXfxqZ z6nagA9m`2S&)0A_KK$}edD~mt3(C={-NUM%t7m4VczBc|$sp^Kx{c3pAjHV3BYcb*${>sOwbIiPK*&^msthJ_S5H@#wL zL_2!6##T?gDMX1&%L^q|`RwBQ-g>;rUFz-(#>>+EkSqh$Hc*d*}7Pjg4g^ za=il%q0)$SM?<^%@kQiBR@UQgdQ*s+5Sz`Cu;`LKft5MK+!r6!LP%EI2d*ut$|zyC z>^#hsyrhgoK~PGDn@dr79ub7?m0456C5Kv*+z)Ko_QpQI}+apO#{lo%alDpbW z@xfe99w^fR9P~`;Gn0Y~O#elu3=gx-S4w*7N7H{Ye-YY{MBGaRx*6&^>b<1d(j%N4 zgC18LuMmnIK|@Ex+itmE(ghb@wR7H_6B$V@2ozxD@SPpi(w3kbSDu!p15~L4MJ8St zsYeTh@!sO)#w+3{r|oXY_6czm62V;Q^#2vGlOaJ1vhxHiK)6~K5v8!7NsJ{w`62AP zFmneT)T_jbl@ZJOvC{J~o)KO_3fV3~Q4L!NmNU#$D%&o`J*J!&NIb=FSH;e>R0OqK zN`B&7;tMe!|Bsj&PT$5(w)Chfr7cRndt16|Jeq3RF)XdTX`BiL5O6D*!K^G9x@?&Z z;N!1ViuS%j=Eu1ObFw4t+>q}jr-hW@A}R#r!@wsRXMqaZIIDa`x$KUy)6!D&HEE4U zFyGTl*Uui=jvuu@gI^&Q*2mOT|M@FgGx(gNkGdJHS+MHXOWd&d)3|s&Af(n&Qi6qR zd#Wl*;vnCR$0##3Vo>Oa(hYSCDwV!JvendgrsA|wmfw(IbbI1)(>$ucRS$o^28PDT z%uo}R7XX%Z?0NxJ9_d0qGt_S5#+!_&&XCNvrCw^o zIFkmam|;`k)TyJ>^x**d{hPMj|XeTUL@kvOPa7lf4k5{ zI4WaQc(g-!OP*lNXRM(HytmdV)4zZ_{-(oMjQR{<6k;UQb%ae5C{ifktt9h{mjX^8 zZ^4Ex_mB5hw6tx=q-$J}Il7>NN(`)+yfELZ!ndGtEvUrZI}q5|xB%5RDY%c{jgK6~ z_`kH5WEK-52F$Q2R>4_(;r=L2Nwa#NBrZZ(*a|DOY4^We(jE7_`+3RV3lTUR#1p=H zOOv>{Z6&9m49)Z5SMSIF41D_f&Wj7O_XDpS)orDbDDk>0aYnxPkGP(Clw$ZoprCZC z;?jeKt8b?~QUIsAhu07bxce&mX`xgyE^7`svu6ts%%Eb+y3d!j?6gnn z1clsPgRdb@)~=Zxqn;fBmLUi|;yia{;b@Q=p8mSgl5NL0F;Y_~D{9eq@R6HS@i-uKzn1(A@;adujwxg++ zQaLGFuatw7757%w=t(y2Z}Y!L?)ESYy)cBGf|7{NmL^UMLBEAVQWstPOA z(w~wP|4z|Rw$qq};DvPTWrjqWdgKaVpoHEUZ2}%|3J1Zt`2AGvov-*oS~z$aspL6@ z!H<5l)9uUne~+2JB?vC@5K!Ew7`8Y_j zC88!;ky*Y00HguJJpjB1%KX6XZ%iu)^?k@@GX<=XpC(BK6&u=uxmmPSWU2wUYc@%x zmzI)o?n$Sp^^6a*QtD=Q!Id)vp~2??vhbQXMXn|RG<(-CJpMV2jltDLLyhT3dAJ|% z-P_DwY0}x0%esYHXL`ZoMSPsp%z{mrd+qQ(sH@*60XVsM?Bzblq+*ZH#ZQAbuFgR! z^}2V}p12?{BXdh|5CGN;RFu-U?BO8oqNi<(Z+ZBK+snq#=9tFY5Rl@)F-QN)*qK`(PpS;vC?I zrMH2y|B{bF@WM}{tce;L+K_a5{&PAK{gm%(h8+q|zzX?T%6E$|y!$+}j=WXhoc<$$ zuEDt}XV)P9;kO#D zktQs*ap(<$;XFt(#-3?S6f^n`<^>}(A@X)=LK~pu%h4@sGRpO8U{XG`Hcom=k8C9U z?C-A%hrw$x-TraDMBVZnnU0XbnN)g9SBlWat$vj_&9%23dPhW(%#RK0qQaKkfx9tr zN?Jc3c@&pJrM;_kNQLR9wfH!iEJjKlk&x31r-CjLgu-hiqJeTN&!(Fc2B}I+EHgIF z5Pnui^0eO*gP}UDYImD*ar!b;Pkc3JW&6E&vLjeS9u5b)$&31*A-kI*&KGuGb~ch8 z{w~N%j=&_q>CE67g{*LcJE0^0*}Y?=Q~_*k!yO5~HCCbLYi|#on?>1NocLyC;8oZs zGxyqS)eux{=}{j5OHPO_sWuAj#4g`lzWj&5g`WhV=kw)(yJ~snc?R@RA)t3I(i?WS z_k$X;9yonL3F*QN`LnZlWKSBD< z6o`n4`DvGQyVkzRKle{L(pUh@OQ{D}RYWx=FZ{ZLPLmdXES~nl;--t z*0Ch&SM2`c&r;LxSmRW5%i%)EW^d~%%(kp?ujLnEa^%$q;gw(M@HjD;yN4MAt=;AB z*__$_Jr>_W?<`NSfL8_ASIfj>XZ;ud>yUN^=LgSNEMDk#Z*mQ--G#Z0y_7m2JsW-db3RE*Hsn2172b8+;c%{Ft9TuVF0aOz~r zP^6{IT!hMW+Mx@XA`T~WeUa1q`+9%>gVztQ=j-)+J|Fk{?UrA{N<%?)Su1i0BpYXe zLT6#){R1JDS9qmGI!Fs&JP_a5>j@i#JKLH~(>e8c=pei!vBIC zg;z8Aw?yyee6Ok=*Kd?WWzRF_%$6*B;eLpItQe3}f>>7?Cn)f^B?O)(g+k8i{FQ@# zNeKmk*N{^nfllz>L6To=`DNvE7iiW~}Hw+$m_A)`fUdrclCOQZ>^FDT9 zIT&mP)VRvEDb6o4(`n)JT+Xfjit&?g;qcJ2J2tR>r*MHU@o0Ea%-c15^VT2*?5wBS zfHHI>=tTzXlxSdzNpM`b(>$k*g96P9wf3YfGjOu^?z_S z1YqRO>Fw+ws^G>8u*Y;z;2v(>t11j3qS1Tu|i|WU#m%GLr&ZVgKo5bELo`o%5w4&5mj_T zG8Pw16R{|8ACEk;BbkKzb$GZebkNH&9ZBdJ8ktW}sn9{wq_`rWIxs<<8D9m`B-aL1Po1+#6&GiGa@DchE2S1ToX%6go z0)?Dx0Ub1!oJ9`MGFXG+F` zI#=RDJw`b>s|nR@jYeBgqh*ZJ=tj)7n%g3e3N(_of4%k?KQqa9S>KUt@I|P}74&c3 z@I~Y}<$C1q9UiM0uC?km;m(``9DmqG>rAIN;!kdO9ypsgEeEw>LrHYqdWfJ34ImIp z>KPe^7wzb~fZ^fY+89yyTSL)EIk``<5;&W5x@V-M!S@xpHyj%Khy1`f3q&FK+!#UY z9@H8jq<(1QC@;o@;vj&qa}21l~;j)fXz)wT8lyiQy13jj;U5}-#;QVJ3BM4iQ%c8Mn9sUO?m6rmN z5bq=K2&fu0HAUC;3&owR5DkuPn5xG$$0C34=8hH8t|PUN@0A%R%I2&~+CZRYfetfz z=7}PviCac7HL!#sV4;HsF6Q^D8IVd=6q?9@+ErQc9~<%ev;fDT|2&%W?$DhbNzY3+ zOy;7uiybQ}+C7Pz=vn@hSD#zMQ=%$PvrnA>2-^ICY_C&zN` ztE$bK1WWG}(;nA#dzdn0Xf%wj?M{3d2|Q`t7oJo9Y#s+7RP|_1aMm0yzEp}kHEi|p zg3os*GEX7Te{+qYfK;D2erys56H0`qk#uR<87u_6U^cOk#!9$Z2=WuLnkc#e*9LFe zv#4O?t|k5Ivv}z>)6mp92{N9zh97A0MX3n(0=UK|=64Nj6vV2*nqTsmRtN_VRV-@v zaz61Vb^QSlof@y`MU;F)MXGYYxWCoQu6=~taOEYl!_&=_-=A#@A9@T7Mp|c{O#A-w z>(mEqvTQ^(o8(*AKYC-UuO-i|ZRg-~Dcp=6J9CCuRplVA!Pd+=dRQm+0iCq}5{thz zfI(+U!anVgUAU6H>!9^+G_7}ORERJz8vX79Wygy|w9s+}D?nE%XAJ5I+!T_-oZ)2+ zEY9d76uMW&=%$sb6adfmsV>qHHS@$^Ko;MiRW=^N%MLN>!|#4=SQm**q!q+Iiv?#s zHW4_3?PkKGncHLiKNz7%BtwimqK#Bt;pBv+Vw8ZX4w69wKX|Ehzz;W2CL z9kNu4eA(|IW~IYkwSlRmq>7lBrnk=Ia-SosG=VNF-aWIELV!P;^v7< zj+sTV+cHhC;x}VCb^#9rz7&(wd zxTQ*^;FyIH))8)_b%5sR=01`M#kTe))J8Hj&4By{FJ-de>=r(UoBOc&<{8<22{;mULEsm=kxjPVlu+H3R z7z3SYe5;CCs^BUgfE<&3JpA-@Vqtk{lH_!JiT4gX8j~By|D0!8wXAJ1Qx-j#&acYl zUlJNk!Z~qW8d&kG45%e(cPzp8yEj5>tp5_J=YXZRaa$x6eogphFJHC&n__P2Sys&W z3+6J{OZ~|OXY??XNQAq^X2jWIe5&fdq~m7EON+_vXTr<*d7+KU(;g@DPAw_(BELEW zD~#^D90FXbt|s6cf(pxAq`eplGxmbs_1mpC37o6NCtLUp0Rmk{2rB|!OWu+(&Dr06 zS|+QN#;1^%>^4taH*oARx_7&28yMX>>RTF~{dDBU*HddA%g$YZUi?~r9cigW>kA3G z-#6?`ZclPusRT>L!KemS z00{W>Gt|zTA=RwFyEEqwv9jlBeju>ke1Uv$k6sCDwV|tj22W$06~hwRA@_E4}yG2Y6$Udvr;7>WRSwQMnGiBVy+OR)?=b13c_#{}0rXY!9?9 zX}wtyN6_(V;ttmt$oADNmY391>G(cgXyK{JH!@ZVD)RBiHzZnEMy_+_9@*wqIeUNz z>r{`fM15TF6z(jtYh|&b)Qv@M#fTQ2<&Xt3#RLuKHo$(7T#=ykqRLENm}Xd)_eFHK z(jq?7z82^ty8~%qESf6dus4W;BKw-+vyJH{gOSU3syHP?69p23muI^pzMcbld$MIS zlPXzq$|IchpS|byUpxAaxZNs!QCbfCznHAZZgQXJ2&;@3)8Z&JJpP+GSEL?lRGLc# zJ-*Zkf-kgZFWMEkbHqlD-`%3^j!bmBETUy`d|n*#*s6XEkZj}YU$Tk-E8k5yOcme6 zYwG1rJZYBVw-cPkLCtzbj}31hn)fo>J=5O%Eby0=kZb??w!l#_H-HA3+~Qb?WFfji zzRv_%45g6vk4UV%(n5*D+YUBN6^)@5yNNE$3pFdniy!K50XTPlF0S=eRp(-|m`&=| z*PunAOj%z@EU~{u(Iz(>v1w@S$7QwOy-PZeIpA|8H&CF#=R6!k&0e-^UST~Hczqk- zJ6=J#GQN}MrwfYU|I*X(gxCC#JDxqetDV(=`}+#8_`a+^c*bM%?3vBc27<0nGLNqy zIOud+BRUBE+K0rT*K;`IbjM81I{kxZbs#IKIp-CW-y4|X#KTp7zryZ@B67^vsy03^ z&zB#tE4L|Ho=ch}z;1e6gjt%LJ!km8e0$5%53I_)ff-+ef2`)LR3gX-jp-sq+=H4W@Fm(8HBE>NhHf6) zh|{}&e-EG)l*@c3T15mOqG24W_pqL^hv;mz@Xw*F+^EkA3W5vW)b%9(rsm@>6b71< z`|89w7K4@$T;hg@$fa{p63+&srnQRoi8X($6giy%erEeLdLKz`#k(xHJNi4^d%XC_ ziwbLzDv*E;eAF)=3oQF-n2j~ivq=2kKfE4!2Onzss>9$lexqtw@N%Sa&lL-{V6la} zVbdzNwo`A=&|crJ(Bp^XI;CuTP^_4qkz^Etbm&MmDv8fgHmI=9+^N*-i$iWt5kUz3 z`O1h>NG!&i&uMtaO5h8Z7UzyEN#R2h+Gvwxwe}-WGyAPlH!>O$=ZmUtHbbn1&y;Cf zkQ3R4BWKTz{|ra;OjEl3x-R!W0dO>PyO+H}>UycYM(z(>Pj4280z3d}j^_P4-syn{G@!&8+){TTHbVLIT+9N}hHkoXB%+$b+ z6<+| zi|C()i^`S>lwO?I(Ne$KeH^%4dL(C92$jJS@P&Lnq^g(oP=yWjJY`wWk@RqIeW4Lne?N((qvj}^;S1IJ{wW@SRr4OJ1eyw z-zq})Y~eM>grn@lbdP1Mt(K%S=q>gm0-jwA-L(NL@o>felxx-Ki8sv?*MCXKvR}_t zkH0LG^DM$$Wdmu%pdh0a3fviP&lcxzUQbzW1-3K-J|5$`uYfhiIgPd`ARA{J?tIGnv#_7UrM5 zyT4AoE$Dxeo<1;#O-MOwGO*NEe*ixhrIu(-u-`?O)XIRUc23yAF#CKJac0q%3I;N! zXBs0Km=*p~q~0cs&r21}w18Qj1xt^FJHME^%0?FaCZC9{ZgFyg0joMQ zA!(L{5O}^fP72OSNnfOBs*#_^ZFdZ8{3EV`ctzN?`^S??>eI-HJeex_lyf2J`p7{G z^1{ zb?;^lzThLjZT?+FjeO@KG&!m#!w*K|h|`mwl^0J)7QEa71&*m1ILw35@r&@TT4ov` zu){;xoGz`>&mDJ^a9VqZvx;e)(%#-_2+;ky2NY8Tez}dqYr@>A6y)T{CEOtv1uLeU zKX|yb%!1@_`v7Jvpr0f))xXG}96eRAXO)wwLGsDoX}#yLKKdY+jkyJddVYnh3;KoD zuMGCPhA!Wcnm^I+hWSY!cxzZsjKC5+alapGT3u;nwWqZ;ywy!ZMymuVD3;=KvbQIm zn%K_B$gsIJnf4K14ysPZwjSS?pBz?G?tBU-jA?2M4cv$joW6%J2eN|Y;8Sa>wTH_> z(Q^5w4Q#(czc`cNxye5U$+Owo|C3l}Me!Ri@6NpzeK6EkcVg4vD1&)Gj%6}xgt@3G z=0@NbKYYNulZE)?!yxwNVb#j5kj;OjhgGz>GZPgakR^3nsMzh9CV)BhtWT{~Zd}A0 zXPgE$3iw$TED+iqQt4qm=BbL%Xl@deH!M--v>Jfrt4#sFn2B=(C%YFO_=&wSP_BJp zk6|4{{&PNMIAGT7pW=Dj*M}DO_%|)vV;{7q9oxT;BE|sMdEJnl`fq1YRf9B(b6k24@`*A@R z;Kl3A)NuP)e7Hw#)v+k0ZoFCaw-OQQ$;jCh(uUwXb$UPKA)P=pjbs`W{&8U?*!nxn zG039bybMWjuJ4WqmP?O}0Xy-Fh074h#NIahO+M)VHVur)?^LCHHC1C+h=*hm&I=99 zZ$gIIzw2CwPEfS%ga(I&*>LJ&pX%r?kIZAA(>{R)Q#-8cZEwe2t@m!8+J-f$r8s-C{xnFS_#V<%hu^jtMX=2Mo9pZU0V-C?g)j-rk;* zrD0x1*Dr_|AQX(*&i(aml2PQfi`%9u z{}BK7v?1KS+}XsHC`i*lYrS=n-_+I;wRyX|R!vf|f=Zr9GW;e}L(|nF`V>4NBtbXs zN;%sXV<5G^docIKD>RxPs~C<6P(_y~yE!_dQ797`6C-S_reja3M-1dHpk5Qo?n?6J z$BV{0)julE<5Ds`S>D8RU>$Ol?SZ0g_AX9gF)?YnIT z(q=`RYgooT=t>)U`rt*U#yr~sg(9koj^Dpq@bxA=x`ZJDZW!vJGFCnx>?83U9gt^U zPq}+?v}#{!vK4?nN`8_8xR6PDjHM^8di~Yq$iSNWo5vyFukDK4-IgXQmq`)1VPRWx zm(ZJ_9ZX=u70|!Kugi`BW|PIi2qAQzEAA4kpYL$av9?y}2J0-aHQF zNp$oJF%;W+9oP3SzhZp+`j`4jC$3qB$CM9s5SZKREobohS0he;Nezi`QsecXZ$neL zx70`@+GjG4BrvQM4I#Ayw7;-vR5KTsy<0Aj2QyP8sO%WF5d5&h(diyu-@?`Z{8s}7 zp~i~c+hhF-(qi5ehW&#r^goEcr0-CC3sM~Upa0PivI$ltP4B+?NXsV!1^U|I^Ze4U z@u4ls<(~OxIMy4Y3YwKnZDz!5w@lb_{2B*{adXb6YhidXL*0n!%f;Vl(MFX#_JA3W zY4RWZ`;Y~+&xrRKtfTVG#lISt@Y-V`qVBMR?j!OaS^>tsaMT@)NTEIBbRye_G;=4i z>DN+vVJ;PEab7X>L4VJqgh&2ce~uP`X&D>)Dkn?sJS9#~sWRe9+**|4(7^e=ZNoVo zzV>=SPBRc-+!nnnglbpR!c2`?8L71P>kD0E+`CQw--%7l%`Luw5`-6Dakt+5f@5%Q zF7+xKuUX1}VfUBmi0Vi{<$2ZV(Xum0U^)Z+<3`ai$(*M$?s~r~-ia$_%&)PHPQR}s z&I(-#I!v&)61uNw^Tt@xm5@+d8wK%9pAkdt_Cb-qy(%^buFCdKN3(>%U74DTC*PIZ z=xvk*nT)Gg789+j{2UzY)UB`)y>gIW?%Em_PnOtsz)>@W_J!HaiT)BwY6zUtbe!p~ z?T7LAry-Hp!?!h50<%b?C(t4}hjSTaJ_hK8>8eD3hjCN==hqiW%xxD=E^d4%B+@zq zj%Zr-#J~QEtDHl0{(EeD&%Gc2nl8q+v(`&<76Vp8amw4MnT|%-iRO-hcQdW^(6>nU zD|L_#n2Cpfp|%ybir`jL6A7TlJdbgFq5D{(pJ4=}4kvSDL}}tQn_2 zP4;JXy-dcqYDkea{W!qNMyRiUQbM+e7>ES*U=+UThXacZ>DfLocD_&8+r&eM8w`-t zjraf2^7=zG=HkWe%80(oZmq&vKIhy!WoK(raEN7rYqxAg!AVJ5O)zERouJbhmcab0q&9_ zMxKtQF7#+lcJ9RD?iYt}CT}%Pmq%Y9&?lk&O|7*IAhPb?PN}9og|Pj__+`iA&@4>B z3pbtY=2B9^4k#2-XJFtlQI7I5%HDm_z~}-g$-muC!l?cxZmsZ1YyR7Qn=&Msi#q6} z>hvs3mu#o-zj_BE%08l^vLiXva^n2#@QORvEJ!a44Yn*ux hqAds(aW_(-`fF+F$G?r#>yfV|f2~~WzV@H7{|9U}4jTXf diff --git a/packages/reporting/public/assets/ros-health.png b/packages/reporting/public/assets/ros-health.png deleted file mode 100644 index f531098b686e703c52b643c397800f08381449d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8220 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 diff --git a/packages/reporting/public/fast_forward-24px.svg b/packages/reporting/public/fast_forward-24px.svg deleted file mode 100644 index d97f12fd1..000000000 --- a/packages/reporting/public/fast_forward-24px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/reporting/public/fast_rewind-24px.svg b/packages/reporting/public/fast_rewind-24px.svg deleted file mode 100644 index c8279d579..000000000 --- a/packages/reporting/public/fast_rewind-24px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/reporting/public/favicon.ico b/packages/reporting/public/favicon.ico deleted file mode 100644 index 6c149bf7f4a0f470043668b89e1425a0f32e5fb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9294 zcmeHLYm6Jk9UtccmqNfP;uQ$7gCbInobT*?cy~>E5h|^OP!tJLQKez91B@qhemWKcBblLW68wVf49+Y-g1Qq-@nTH5_G`1I=4!=7V&Rx6n&CpGQd zFwU)-maaL*mtM&{vDGjx48uYD7ts1NT*r8GK3vt*D?ofXzQ)2t^F%Z7d$)WVUd>BXRKd&N(} zu%zdyeEuTT^aoKxp59*4Rwm(x;huKcxi!mppla#QOlhMOj>>kpIh$QlDdw+7K7WK9 zJ63V@9d*WVo2q|YJAWhU#(T)?PSw<_JJzf@OOZOYwJ@?8_48$_4|IQcCH>!3v+#38 zdWQNoiu$sj*Dajk&^AjeCf&2df9uG|Qo1`p^Hsk-Ip%TC*8g0~<<3viVRHHMGhp+( zK>uN%p3dQD_wT%N^rs2*shX2pi+lE6k+!>rEiLVq1bS96wGDJnhwoj_G5_b8guGB*@ZvNmyP@1F;5~EU#uA8<54=e#@b78PU;uFl<|NK_f_qYb7b`78}cz^ z4A?Ei=M&G?cGq$joGIf`EgEIm{b-0L=v`?UqzCl5 zGY%iId&0ByM`V7JD3b!e-=lx~G*Uk0qpd%Qnzm>PJsr;WQ7o=wegePUC6OiFa!vh4 z^eg{~;|bVtx1_J1&gE7>{_!|mz}u)Pe~=23Y(oAf$UhRtlVDYQbhM6K2=`(Vx>?xk zuXHa+#Le464)1~eKbPCC)EV-eNkiu;WgD$)Q_jOj7Hb+sS@sNTYm!lqw|>TZW+7y*|`qr_s@oppAO3v zpTW09?fy>i+53 zGPP}N>Td+B}wTP=M^=@IDvXx&?Jj8STxE{2CANtJIyWiOfd^4Tk z+fL&<+)lUf+e&wao0-l~BhyJWGPA+JbBgu=$7l_=7qfJG5leR#F<=B^VvaTHG<>#h zKq9>uuEMY|`2Q5G$PRN*ckxNJwum(1`uo!3f5Uaik*3IVp=;#u9^`Ump>!M{x&9W_ z2i!|H^Sy=4!5MvRtJ)5=GPB zSBxphkjJ!ertn#0x!9L0(5dE@DnIf)_X+7FlPT^c#S-Vm=fv2iv-Rv6my4nf9G}Zb znq@U=fM3tP6hEqVqq>_USA?tBmUQAdrV`5mzT!Iq=|aAfomFMM13MXD0hgz^bA6dMfDUaKExTH5zj2HsZOiNkBcpe4;3C{v%ubTH^D!k z*@Kbj|GsU6x*(o`uT^r2&Y_x5eYxM|Vx%3p4n5w9XCgZ&)psEVNFSbyTwc_ibpH}B z@|mi>eOoBz71v9x)}mj7Z~HPrXBPLl&YZu>OgSdvUFc4>cw_&Gc-lJq&nimd&vy d^I4YFn->DQm`!w2*lSE+FXK0tW&HNi%(sUmd-(tW diff --git a/packages/reporting/public/index.html b/packages/reporting/public/index.html deleted file mode 100644 index 7007d690d..000000000 --- a/packages/reporting/public/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - RoMi-H - - - -

- - - diff --git a/packages/reporting/public/logo192.png b/packages/reporting/public/logo192.png deleted file mode 100644 index fa313abf53936aefc517dbd583b724a57199d415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8581 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�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 b!B~?t+WWKS5u5)CcMJGaRz{_UZlwPKNp@r} diff --git a/packages/reporting/public/manifest.json b/packages/reporting/public/manifest.json deleted file mode 100644 index 080d6c77a..000000000 --- a/packages/reporting/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/packages/reporting/public/pause-24px.svg b/packages/reporting/public/pause-24px.svg deleted file mode 100644 index 5bf80490a..000000000 --- a/packages/reporting/public/pause-24px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/reporting/public/play_arrow-24px.svg b/packages/reporting/public/play_arrow-24px.svg deleted file mode 100644 index b882cee81..000000000 --- a/packages/reporting/public/play_arrow-24px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/reporting/public/robots.txt b/packages/reporting/public/robots.txt deleted file mode 100644 index 01b0f9a10..000000000 --- a/packages/reporting/public/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * diff --git a/packages/reporting/public/silent-check-sso.html b/packages/reporting/public/silent-check-sso.html deleted file mode 100644 index 20ad2098d..000000000 --- a/packages/reporting/public/silent-check-sso.html +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/packages/reporting/src/app-config.ts b/packages/reporting/src/app-config.ts deleted file mode 100644 index 2cabf9ee4..000000000 --- a/packages/reporting/src/app-config.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Authenticator, KeycloakAuthenticator, StubAuthenticator } from 'rmf-auth'; -export interface AppConfig { - authenticator: Authenticator; - reportingServerUrl: string; -} - -export const appConfig: AppConfig = (() => { - const authenticator = (() => { - if (!process.env.REACT_APP_AUTH_PROVIDER) { - return new StubAuthenticator(); - } - // it is important that we do not do any processing on REACT_APP_AUTH_PROVIDER so that webpack - // can remove dead code, we DO NOT want the output to have the stub authenticator even if - // it is not used. - const provider = process.env.REACT_APP_AUTH_PROVIDER; - switch (provider) { - case 'keycloak': - if (!process.env.REACT_APP_KEYCLOAK_CONFIG) { - throw new Error('missing REACT_APP_KEYCLOAK_CONFIG'); - } - return new KeycloakAuthenticator(JSON.parse(process.env.REACT_APP_KEYCLOAK_CONFIG)); - case 'stub': - return new StubAuthenticator(); - default: - throw new Error(`unknown auth provider "${provider}"`); - } - })(); - - if (!process.env.REACT_APP_REPORTING_SERVER) { - throw new Error('REACT_APP_REPORTING_SERVER is required'); - } - - return { - authenticator, - reportingServerUrl: process.env.REACT_APP_REPORTING_SERVER, - }; -})(); - -export default appConfig; diff --git a/packages/reporting/src/components/app-contexts.tsx b/packages/reporting/src/components/app-contexts.tsx deleted file mode 100644 index d395fb66d..000000000 --- a/packages/reporting/src/components/app-contexts.tsx +++ /dev/null @@ -1,4 +0,0 @@ -import React from 'react'; -import appConfig, { AppConfig } from '../app-config'; - -export const AppConfigContext = React.createContext(appConfig); diff --git a/packages/reporting/src/components/app.tsx b/packages/reporting/src/components/app.tsx deleted file mode 100644 index 4dcdb833a..000000000 --- a/packages/reporting/src/components/app.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import '@fontsource/roboto/300.css'; -import '@fontsource/roboto/400.css'; -import '@fontsource/roboto/500.css'; -import '@fontsource/roboto/700.css'; -import { ThemeProvider } from '@mui/material'; -import React from 'react'; -import { rmfLight } from 'react-components'; -import { BrowserRouter, Link, Redirect, Route, Switch } from 'react-router-dom'; -import { LoginPage, PrivateRoute } from 'rmf-auth'; -import appConfig from '../app-config'; -import { DASHBOARD_ROUTE, LOGIN_ROUTE } from '../util/url'; -import { AppConfigContext } from './app-contexts'; -import { AuthenticatorContext, UserContext } from './auth-contexts'; -import Dashboard from './dashboard'; -import { NotFoundPage } from './page-not-found'; - -export default function App(): JSX.Element | null { - const authenticator = appConfig.authenticator; - const [authInitialized, setAuthInitialized] = React.useState(!!authenticator.user); - const [user, setUser] = React.useState(authenticator.user || null); - const appRoutes = [DASHBOARD_ROUTE]; - - React.useEffect(() => { - if (user) { - return; - } - const onUserChanged = (newUser: string | null) => setUser(newUser); - authenticator.on('userChanged', onUserChanged); - (async () => { - await authenticator.init(); - setUser(authenticator.user || null); - setAuthInitialized(true); - })(); - return () => { - authenticator.off('userChanged', onUserChanged); - }; - }, [authenticator, user]); - - const loginRedirect = React.useMemo(() => , []); - - return authInitialized ? ( - - - - - - - - - authenticator.login(`${window.location.origin}${DASHBOARD_ROUTE}`) - } - /> - - - - - - - - - - Go to Login} /> - - - - - - - - ) : null; -} diff --git a/packages/reporting/src/components/auth-contexts.tsx b/packages/reporting/src/components/auth-contexts.tsx deleted file mode 100644 index 91c7f312f..000000000 --- a/packages/reporting/src/components/auth-contexts.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react'; -import appConfig from '../app-config'; - -export const AuthenticatorContext = React.createContext(appConfig.authenticator); -export const UserContext = React.createContext(null); diff --git a/packages/reporting/src/components/auth/__mocks__/fake-authenticator.ts b/packages/reporting/src/components/auth/__mocks__/fake-authenticator.ts deleted file mode 100644 index 128989cca..000000000 --- a/packages/reporting/src/components/auth/__mocks__/fake-authenticator.ts +++ /dev/null @@ -1,31 +0,0 @@ -import EventEmitter from 'eventemitter3'; -import { Authenticator, AuthenticatorEventType } from 'rmf-auth'; - -export class FakeAuthenticator - extends EventEmitter - implements Authenticator { - user?: string; - - constructor(user?: string) { - super(); - this.user = user; - } - - async init(): Promise { - // It is required to call this before using any of the authenticator functions. - } - - login(): Promise { - throw new Error('Method not implemented.'); - } - - logout(): Promise { - throw new Error('Method not implemented.'); - } - - refreshToken(): Promise { - return Promise.resolve(); - } -} - -export default FakeAuthenticator; diff --git a/packages/reporting/src/components/dashboard.tsx b/packages/reporting/src/components/dashboard.tsx deleted file mode 100644 index 369f8fe65..000000000 --- a/packages/reporting/src/components/dashboard.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import { ReportDashboard } from './report-dashboard'; -import { buildReportMenuStructure } from './reporter-side-bar-structure'; - -function Dashboard() { - return ( -

- -
- ); -} - -export default Dashboard; diff --git a/packages/reporting/src/components/page-not-found.tsx b/packages/reporting/src/components/page-not-found.tsx deleted file mode 100644 index d34bffc41..000000000 --- a/packages/reporting/src/components/page-not-found.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React from 'react'; -import { styled, Typography } from '@mui/material'; -import type { Link } from 'react-router-dom'; - -export interface NotFoundPageProps { - /** - * The link to redirect user to the correct page. - */ - linkComponent: React.ReactElement; -} - -const prefix = 'page-not-found'; -const classes = { - div: `${prefix}-root`, - img: `${prefix}-img`, - text: `${prefix}-text`, - author: `${prefix}-author`, -}; - -const StyledDiv = styled('div')(() => ({ - [`&.${classes.div}`]: { - width: '100%', - height: '100%', - overflowX: 'hidden', - overflowY: 'hidden', - }, - [`& .${classes.img}`]: { - width: '100%', - height: '100%', - }, - [`& .${classes.text}`]: { - position: 'fixed', - left: '20%', - top: '2%', - color: 'white', - fontWeight: 'bold', - }, - [`& .${classes.author}`]: { - position: 'fixed', - right: '5%', - bottom: '2%', - color: 'white', - }, -})); - -export const NotFoundPage = (props: NotFoundPageProps): React.ReactElement => { - const { linkComponent: routeLinkComponent } = props; - console.warn('Photo by Aron Visuals on Unsplash'); - return ( - - 404 Not Found - - Are you lost? {routeLinkComponent} - - Photo by Aron Visuals on Unsplash - - ); -}; - -export default NotFoundPage; diff --git a/packages/reporting/src/components/report-dashboard.tsx b/packages/reporting/src/components/report-dashboard.tsx deleted file mode 100644 index 75519371e..000000000 --- a/packages/reporting/src/components/report-dashboard.tsx +++ /dev/null @@ -1,299 +0,0 @@ -import React from 'react'; -import { ReportConfigProps } from 'react-components'; -import clsx from 'clsx'; -import { styled, useTheme } from '@mui/material/styles'; -import Drawer from '@mui/material/Drawer'; -import CssBaseline from '@mui/material/CssBaseline'; -import AppBar from '@mui/material/AppBar'; -import Toolbar from '@mui/material/Toolbar'; -import Typography from '@mui/material/Typography'; -import Divider from '@mui/material/Divider'; -import IconButton from '@mui/material/IconButton'; -import MenuIcon from '@mui/icons-material/Menu'; -import ChevronLeftIcon from '@mui/icons-material/ChevronLeft'; -import ChevronRightIcon from '@mui/icons-material/ChevronRight'; -import { ExpandableMultilevelMenuProps, MultiLevelMenu } from 'react-components'; -import { Menu, MenuItem } from '@mui/material'; -import { AuthenticatorContext } from './auth-contexts'; -import AccountCircleIcon from '@mui/icons-material/AccountCircle'; - -import { Reports } from './report-list'; -import { BuildMenuType } from './reporter-side-bar-structure'; -import AllLogsReport from './reports/all-logs-report'; -import DispenserStateReportConfig from './reports/dispenser-state-report'; -import DoorStateReportConfig from './reports/door-state-report'; -import FleetStateReportConfig from './reports/fleet-state-report'; -import HealthReportConfig from './reports/health-report'; -import IngestorStateReportConfig from './reports/ingestor-state-report'; -import LiftStateReportConfig from './reports/lift-state-report'; -import TaskSummaryReportConfig from './reports/task-summary-report'; -import UserLoginFailureReportConfig from './reports/user-login-failure-report'; -import UserLoginReportConfig from './reports/user-login-report'; -import UserLogoutReportConfig from './reports/user-logout-report'; - -const drawerWidth = 240; - -const prefix = 'report-dashboard'; -const classes = { - root: `${prefix}-root`, - appBar: `${prefix}-appbar`, - appBarShift: `${prefix}-appbar-shift`, - menuButton: `${prefix}-menu-button`, - hide: `${prefix}-hide`, - drawer: `${prefix}-drawer`, - drawerPaper: `${prefix}-drawer-paper`, - drawerHeader: `${prefix}-drawer-header`, - content: `${prefix}-content`, - contentShift: `${prefix}-content-shift`, - toolbarTitle: `${prefix}-toolbar-title`, -}; - -const StyledDiv = styled('div')(({ theme }) => ({ - [`&.${classes.root}`]: { - display: 'flex', - }, - [`& .${classes.appBar}`]: { - transition: theme.transitions.create(['margin', 'width'], { - easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.leavingScreen, - }), - }, - [`& .${classes.appBarShift}`]: { - width: `calc(100% - ${drawerWidth}px)`, - marginLeft: drawerWidth, - transition: theme.transitions.create(['margin', 'width'], { - easing: theme.transitions.easing.easeOut, - duration: theme.transitions.duration.enteringScreen, - }), - }, - [`& .${classes.menuButton}`]: { - marginRight: theme.spacing(2), - }, - [`& .${classes.hide}`]: { - display: 'none', - }, - [`& .${classes.drawer}`]: { - width: drawerWidth, - flexShrink: 0, - }, - [`& .${classes.drawerPaper}`]: { - width: drawerWidth, - }, - [`& .${classes.drawerHeader}`]: { - display: 'flex', - alignItems: 'center', - padding: theme.spacing(0, 1), - // necessary for content to be below app bar - ...theme.mixins.toolbar, - justifyContent: 'flex-end', - }, - [`& .${classes.content}`]: { - flexGrow: 1, - padding: theme.spacing(3), - transition: theme.transitions.create('margin', { - easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.leavingScreen, - }), - marginLeft: -drawerWidth, - }, - [`& .${classes.contentShift}`]: { - transition: theme.transitions.create('margin', { - easing: theme.transitions.easing.easeOut, - duration: theme.transitions.duration.enteringScreen, - }), - marginLeft: 0, - }, - [`& .${classes.toolbarTitle}`]: { - flexGrow: 1, - }, -})); - -export interface ReportDashboardProps { - buildMenuReportStructure(setCurrentReport: BuildMenuType): ExpandableMultilevelMenuProps[]; -} - -export const ReportDashboard = (props: ReportDashboardProps) => { - const { buildMenuReportStructure } = props; - const theme = useTheme(); - const [open, setOpen] = React.useState(true); - const [currentReport, setCurrentReport] = React.useState(Reports.queryAllLogs); - const [anchorEl, setAnchorEl] = React.useState(null); - - const [fromLogDate, setFromLogDate] = React.useState(new Date()); - const [toLogDate, setToLogDate] = React.useState(new Date()); - - const handleFromLogDateChange = React.useCallback((date: any) => { - setFromLogDate(date); - }, []); - - const handleToLogDateChange = React.useCallback((date: any) => { - setToLogDate(date); - }, []); - - const itemConfig = (props: ReportConfigProps): JSX.Element | null => { - switch (currentReport) { - case Reports.queryAllLogs: - return ; - case Reports.showDispenserStateReport: - return ; - case Reports.showDoorStateReport: - return ; - case Reports.showFleetStateReport: - return ; - case Reports.showHealthReport: - return ; - case Reports.showIngestorStateReport: - return ; - case Reports.showLiftStateReport: - return ; - case Reports.showLoginsReport: - return ; - case Reports.showLogoutsReport: - return ; - case Reports.showLoginFailuresReport: - return ; - case Reports.showTasksReport: - return ; - default: - return null; - } - }; - - const headerTitle = React.useMemo(() => { - switch (currentReport) { - case Reports.queryAllLogs: - return 'All Logs'; - case Reports.showDispenserStateReport: - return 'Dispenser State Report'; - case Reports.showDoorStateReport: - return 'Door State Report'; - case Reports.showFleetStateReport: - return 'Fleet State Report'; - case Reports.showHealthReport: - return 'Health Report'; - case Reports.showIngestorStateReport: - return 'Ingestor State Report'; - case Reports.showLiftStateReport: - return 'Lift State Report'; - case Reports.showLoginsReport: - return 'Login Report'; - case Reports.showLogoutsReport: - return 'Logout Report'; - case Reports.showLoginFailuresReport: - return 'Login Failure Report'; - case Reports.showTasksReport: - return 'Task Report'; - default: - return ''; - } - }, [currentReport]); - - const handleDrawerOpen = () => { - setOpen(true); - }; - - const handleDrawerClose = () => { - setOpen(false); - }; - - const authenticator = React.useContext(AuthenticatorContext); - - async function handleLogout(): Promise { - try { - await authenticator.logout(); - } catch (e) { - console.error(`error logging out: ${(e as Error).message}`); - } - } - - return ( - - - - - - - - - Reports - {headerTitle} - - {authenticator.user && ( - <> - setAnchorEl(event.currentTarget)} - > - - - setAnchorEl(null)} - > - - Logout - - - - )} - - - - {open && ( - <> -
- - {theme.direction === 'ltr' ? : } - -
- - - - - )} -
-
-
- {itemConfig({ - fromLogDate, - toLogDate, - onSelectFromDate: handleFromLogDateChange, - onSelectToDate: handleToLogDateChange, - })} -
-
- ); -}; diff --git a/packages/reporting/src/components/report-list.tsx b/packages/reporting/src/components/report-list.tsx deleted file mode 100644 index 85f4e1e90..000000000 --- a/packages/reporting/src/components/report-list.tsx +++ /dev/null @@ -1,20 +0,0 @@ -export enum Reports { - queryAllLogs = 'queryAllLogs', - showChargerStateReport = 'showChargerStateReport', - showDispenserStateReport = 'showDispenserStateReport', - showDoorStateReport = 'showDoorStateReport', - showFleetStateReport = 'showFleetStateReport', - showHealthReport = 'showHealthReport', - showIngestorStateReport = 'showIngestorStateReport', - showLiftStateReport = 'showLiftStateReport', - showNegotiationsReport = 'showNegotiationsReport', - showRobotStateReport = 'showRobotStateReport', - showRobotMotionPlansReport = 'showRobotMotionPlansReport', - showRobotActionReport = 'showRobotActionReport', - showTasksReport = 'showTasksReport', - showUserActionsReport = 'showUserActionsReport', - showLoginsReport = 'showLoginsReport', - showLogoutsReport = 'showLogoutsReport', - showLoginFailuresReport = 'showLoginFailuresReport', - showWorkCellStatesReport = 'showWorkCellStatesReport', -} diff --git a/packages/reporting/src/components/reporter-side-bar-structure.tsx b/packages/reporting/src/components/reporter-side-bar-structure.tsx deleted file mode 100644 index 6755c12e8..000000000 --- a/packages/reporting/src/components/reporter-side-bar-structure.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import React from 'react'; -import SearchIcon from '@mui/icons-material/Search'; -import AndroidIcon from '@mui/icons-material/Android'; -import ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp'; -import KitchenIcon from '@mui/icons-material/Kitchen'; -import LocalHospitalIcon from '@mui/icons-material/LocalHospital'; -import ArrowForwardIcon from '@mui/icons-material/ArrowForward'; -import ArrowBackIcon from '@mui/icons-material/ArrowBack'; -import AccountCircleIcon from '@mui/icons-material/AccountCircle'; -import PlaylistAddCheckIcon from '@mui/icons-material/PlaylistAddCheck'; - -import { Reports } from './report-list'; -import { ExpandableMultilevelMenuProps } from 'react-components'; - -export type BuildMenuType = (report: Reports) => void; - -export const buildReportMenuStructure = ( - setCurrentReport: BuildMenuType, -): ExpandableMultilevelMenuProps[] => { - return [ - { - icon: , - title: 'All logs', - items: [], - onClick: () => setCurrentReport(Reports.queryAllLogs), - }, - { - icon: , - title: 'Dispensers', - items: [], - onClick: () => setCurrentReport(Reports.showDispenserStateReport), - }, - { - icon: , - title: 'Doors', - items: [], - onClick: () => setCurrentReport(Reports.showDoorStateReport), - }, - { - icon: , - title: 'Fleets', - items: [], - onClick: () => setCurrentReport(Reports.showFleetStateReport), - }, - { - icon: , - title: 'Health', - items: [], - onClick: () => setCurrentReport(Reports.showHealthReport), - }, - { - icon: , - title: 'Ingestor', - items: [], - onClick: () => setCurrentReport(Reports.showIngestorStateReport), - }, - { - icon: , - title: 'Lifts', - onClick: () => setCurrentReport(Reports.showLiftStateReport), - }, - { - icon: , - title: 'Tasks', - onClick: () => setCurrentReport(Reports.showTasksReport), - }, - { - icon: , - title: 'Users', - items: [ - { - title: 'Logins', - items: [], - onClick: () => setCurrentReport(Reports.showLoginsReport), - }, - { - title: 'Logouts', - items: [], - onClick: () => setCurrentReport(Reports.showLogoutsReport), - }, - { - title: 'Login failures', - items: [], - onClick: () => setCurrentReport(Reports.showLoginFailuresReport), - }, - ], - }, - ] as ExpandableMultilevelMenuProps[]; -}; diff --git a/packages/reporting/src/components/reports/all-logs-report.tsx b/packages/reporting/src/components/reports/all-logs-report.tsx deleted file mode 100644 index 8828da9a1..000000000 --- a/packages/reporting/src/components/reports/all-logs-report.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react'; -import axios from 'axios'; -import { LogManagement, LogQueryPayload, LogRowsType } from 'react-components'; -import appConfig from '../../app-config'; -import { AuthenticatorContext } from '../auth-contexts'; - -const AllLogsReport = () => { - const authenticator = React.useContext(AuthenticatorContext); - const getLogs = async (params: LogQueryPayload): Promise => { - try { - const response = await axios.get(`${appConfig.reportingServerUrl}/report/raw_logs/`, { - params: { - toLogDate: params.toLogDate ? params.toLogDate : null, - fromLogDate: params.fromLogDate ? params.fromLogDate : null, - containerLabel: params.logLabel, - logLevel: params.logLevel, - offset: params.offset, - }, - headers: { - Authorization: 'Bearer ' + authenticator.token, - }, - }); - return response.data as LogRowsType; - } catch (error) { - console.error(error); - return []; - } - }; - - const getLogServerLabels = async (): Promise<{ label: string; value: string }[]> => { - try { - const response = await axios.get( - `${appConfig.reportingServerUrl}/report/raw_logs/containers`, - { - headers: { - Authorization: 'Bearer ' + authenticator.token, - }, - }, - ); - const labelsData = response.data as string[]; - const labels: { label: string; value: string }[] = []; - labelsData.forEach((element) => { - labels.push({ label: element, value: element }); - }); - // If we want to get results from all labels - labels.push({ label: 'All', value: 'all' }); - return labels; - } catch (error) { - console.error(error); - return []; - } - }; - - return ; -}; - -export default AllLogsReport; diff --git a/packages/reporting/src/components/reports/dispenser-state-report.tsx b/packages/reporting/src/components/reports/dispenser-state-report.tsx deleted file mode 100644 index bee02c1f2..000000000 --- a/packages/reporting/src/components/reports/dispenser-state-report.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - DispenserStateReport, - DispenserStateRowsType, -} from 'react-components'; -import appConfig from '../../app-config'; -import { AuthenticatorContext } from '../auth-contexts'; -import { getLogData } from './utils'; -import { ReportConfigProps } from 'react-components'; - -const DispenserStateReportConfig = (props: ReportConfigProps) => { - const authenticator = React.useContext(AuthenticatorContext); - const getLogs = async (params: DefaultReportQueryPayload): Promise => { - return (await getLogData( - `${appConfig.reportingServerUrl}/report/dispenser_state/`, - params, - authenticator.token, - )) as DispenserStateRowsType; - }; - - return ; -}; - -export default DispenserStateReportConfig; diff --git a/packages/reporting/src/components/reports/door-state-report.tsx b/packages/reporting/src/components/reports/door-state-report.tsx deleted file mode 100644 index d482243e0..000000000 --- a/packages/reporting/src/components/reports/door-state-report.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { DefaultReportQueryPayload, DoorStateReport, DoorStateRowsType } from 'react-components'; -import appConfig from '../../app-config'; -import { AuthenticatorContext } from '../auth-contexts'; -import { getLogData } from './utils'; -import { ReportConfigProps } from 'react-components'; - -const DoorStateReportConfig = (props: ReportConfigProps) => { - const authenticator = React.useContext(AuthenticatorContext); - const getLogs = async (params: DefaultReportQueryPayload): Promise => { - return (await getLogData( - `${appConfig.reportingServerUrl}/report/door_state/`, - params, - authenticator.token, - )) as DoorStateRowsType; - }; - - return ; -}; - -export default DoorStateReportConfig; diff --git a/packages/reporting/src/components/reports/fleet-state-report.tsx b/packages/reporting/src/components/reports/fleet-state-report.tsx deleted file mode 100644 index 2ae580ae2..000000000 --- a/packages/reporting/src/components/reports/fleet-state-report.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { DefaultReportQueryPayload, FleetStateReport, FleetStateRowsType } from 'react-components'; -import appConfig from '../../app-config'; -import { AuthenticatorContext } from '../auth-contexts'; -import { getLogData } from './utils'; -import { ReportConfigProps } from 'react-components'; - -const FleetStateReportConfig = (props: ReportConfigProps) => { - const authenticator = React.useContext(AuthenticatorContext); - const getLogs = async (params: DefaultReportQueryPayload): Promise => { - return (await getLogData( - `${appConfig.reportingServerUrl}/report/fleet_state/`, - params, - authenticator.token, - )) as FleetStateRowsType; - }; - - return ; -}; - -export default FleetStateReportConfig; diff --git a/packages/reporting/src/components/reports/health-report.tsx b/packages/reporting/src/components/reports/health-report.tsx deleted file mode 100644 index c99ab6a6a..000000000 --- a/packages/reporting/src/components/reports/health-report.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { DefaultReportQueryPayload, HealthReport, HealthRowsType } from 'react-components'; -import appConfig from '../../app-config'; -import { AuthenticatorContext } from '../auth-contexts'; -import { getLogData } from './utils'; -import { ReportConfigProps } from 'react-components'; - -const HealthReportConfig = (props: ReportConfigProps) => { - const authenticator = React.useContext(AuthenticatorContext); - const getLogs = async (params: DefaultReportQueryPayload): Promise => { - return (await getLogData( - `${appConfig.reportingServerUrl}/report/health/`, - params, - authenticator.token, - )) as HealthRowsType; - }; - - return ; -}; - -export default HealthReportConfig; diff --git a/packages/reporting/src/components/reports/ingestor-state-report.tsx b/packages/reporting/src/components/reports/ingestor-state-report.tsx deleted file mode 100644 index 91670fc25..000000000 --- a/packages/reporting/src/components/reports/ingestor-state-report.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - IngestorStateReport, - IngestorStateRowsType, -} from 'react-components'; -import appConfig from '../../app-config'; -import { AuthenticatorContext } from '../auth-contexts'; -import { getLogData } from './utils'; -import { ReportConfigProps } from 'react-components'; - -const IngestorStateReportConfig = (props: ReportConfigProps) => { - const authenticator = React.useContext(AuthenticatorContext); - const getLogs = async (params: DefaultReportQueryPayload): Promise => { - return (await getLogData( - `${appConfig.reportingServerUrl}/report/ingestor_state/`, - params, - authenticator.token, - )) as IngestorStateRowsType; - }; - - return ; -}; - -export default IngestorStateReportConfig; diff --git a/packages/reporting/src/components/reports/lift-state-report.tsx b/packages/reporting/src/components/reports/lift-state-report.tsx deleted file mode 100644 index 45963d176..000000000 --- a/packages/reporting/src/components/reports/lift-state-report.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { DefaultReportQueryPayload, LiftStateReport, LiftStateRowsType } from 'react-components'; -import appConfig from '../../app-config'; -import { getLogData } from './utils'; -import { AuthenticatorContext } from '../auth-contexts'; -import { ReportConfigProps } from 'react-components'; - -const LiftStateReportConfig = (props: ReportConfigProps) => { - const authenticator = React.useContext(AuthenticatorContext); - const getLogs = async (params: DefaultReportQueryPayload): Promise => { - return (await getLogData( - `${appConfig.reportingServerUrl}/report/lift_state/`, - params, - authenticator.token, - )) as LiftStateRowsType; - }; - - return ; -}; - -export default LiftStateReportConfig; diff --git a/packages/reporting/src/components/reports/task-summary-report.tsx b/packages/reporting/src/components/reports/task-summary-report.tsx deleted file mode 100644 index 80311a9bf..000000000 --- a/packages/reporting/src/components/reports/task-summary-report.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - TaskSummaryReport, - TaskSummaryRowsType, -} from 'react-components'; -import appConfig from '../../app-config'; -import { AuthenticatorContext } from '../auth-contexts'; -import { getLogData } from './utils'; -import { ReportConfigProps } from 'react-components'; - -const TaskSummaryReportConfig = (props: ReportConfigProps) => { - const authenticator = React.useContext(AuthenticatorContext); - const getLogs = async (params: DefaultReportQueryPayload): Promise => { - return (await getLogData( - `${appConfig.reportingServerUrl}/report/task_summary/`, - params, - authenticator.token, - )) as TaskSummaryRowsType; - }; - - return ; -}; - -export default TaskSummaryReportConfig; diff --git a/packages/reporting/src/components/reports/user-login-failure-report.tsx b/packages/reporting/src/components/reports/user-login-failure-report.tsx deleted file mode 100644 index 809d67af1..000000000 --- a/packages/reporting/src/components/reports/user-login-failure-report.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { - DefaultReportQueryPayload, - UserLoginFailureReport, - UserLoginFailureRowsType, -} from 'react-components'; -import appConfig from '../../app-config'; -import { AuthenticatorContext } from '../auth-contexts'; -import { getLogData } from './utils'; -import { ReportConfigProps } from 'react-components'; - -const UserLoginFailureReportConfig = (props: ReportConfigProps) => { - const authenticator = React.useContext(AuthenticatorContext); - const getLogs = async (params: DefaultReportQueryPayload): Promise => { - return (await getLogData( - `${appConfig.reportingServerUrl}/report/user/loginfailure/`, - params, - authenticator.token, - )) as UserLoginFailureRowsType; - }; - - return ; -}; - -export default UserLoginFailureReportConfig; diff --git a/packages/reporting/src/components/reports/user-login-report.tsx b/packages/reporting/src/components/reports/user-login-report.tsx deleted file mode 100644 index c2d7262bb..000000000 --- a/packages/reporting/src/components/reports/user-login-report.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { DefaultReportQueryPayload, UserLoginReport, UserLoginRowsType } from 'react-components'; -import appConfig from '../../app-config'; -import { AuthenticatorContext } from '../auth-contexts'; -import { getLogData } from './utils'; -import { ReportConfigProps } from 'react-components'; - -const UserLoginReportConfig = (props: ReportConfigProps) => { - const authenticator = React.useContext(AuthenticatorContext); - const getLogs = async (params: DefaultReportQueryPayload): Promise => { - return (await getLogData( - `${appConfig.reportingServerUrl}/report/user/login/`, - params, - authenticator.token, - )) as UserLoginRowsType; - }; - - return ; -}; - -export default UserLoginReportConfig; diff --git a/packages/reporting/src/components/reports/user-logout-report.tsx b/packages/reporting/src/components/reports/user-logout-report.tsx deleted file mode 100644 index daef95d76..000000000 --- a/packages/reporting/src/components/reports/user-logout-report.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { DefaultReportQueryPayload, UserLogoutReport, UserLogoutRowsType } from 'react-components'; -import appConfig from '../../app-config'; -import { AuthenticatorContext } from '../auth-contexts'; -import { getLogData } from './utils'; -import { ReportConfigProps } from 'react-components'; - -const UserLogoutReportConfig = (props: ReportConfigProps) => { - const authenticator = React.useContext(AuthenticatorContext); - const getLogs = async (params: DefaultReportQueryPayload): Promise => { - return (await getLogData( - `${appConfig.reportingServerUrl}/report/user/logout/`, - params, - authenticator.token, - )) as UserLogoutRowsType; - }; - - return ; -}; - -export default UserLogoutReportConfig; diff --git a/packages/reporting/src/components/reports/utils.ts b/packages/reporting/src/components/reports/utils.ts deleted file mode 100644 index fc895df4d..000000000 --- a/packages/reporting/src/components/reports/utils.ts +++ /dev/null @@ -1,26 +0,0 @@ -import axios from 'axios'; -import { DefaultReportQueryPayload } from 'react-components'; - -export const getLogData = async ( - url: string, - params: DefaultReportQueryPayload, - token: string | undefined | null, -) => { - try { - const response = await axios.get(url, { - params: { - toLogDate: params.toLogDate ? params.toLogDate : null, - fromLogDate: params.fromLogDate ? params.fromLogDate : null, - offset: params.offset, - limit: params.limit, - }, - headers: { - Authorization: 'Bearer ' + token, - }, - }); - return response.data; - } catch (error) { - console.error(error); - return []; - } -}; diff --git a/packages/reporting/src/components/tests/page-not-found.test.tsx b/packages/reporting/src/components/tests/page-not-found.test.tsx deleted file mode 100644 index 62afdf3f4..000000000 --- a/packages/reporting/src/components/tests/page-not-found.test.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { render } from '@testing-library/react'; -import React from 'react'; -import { BrowserRouter, Link } from 'react-router-dom'; -import NotFoundPage from '../page-not-found'; - -describe('PageNotFound', () => { - test('renders correctly', () => { - const root = render( - - Go to somewhere} /> - , - ); - expect(root.queryByAltText('404 Not Found')).toBeTruthy(); - expect(root.queryByText('Are you lost?')).toBeTruthy(); - }); -}); diff --git a/packages/reporting/src/index.tsx b/packages/reporting/src/index.tsx deleted file mode 100644 index 57645e1f1..000000000 --- a/packages/reporting/src/index.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import App from './components/app'; -import * as serviceWorker from './serviceWorker'; - -ReactDOM.render( - - - , - document.getElementById('root'), -); - -// If you want your app to work offline and load faster, you can change -// unregister() to register() below. Note this comes with some pitfalls. -// Learn more about service workers: https://bit.ly/CRA-PWA -serviceWorker.unregister(); diff --git a/packages/reporting/src/react-app-env.d.ts b/packages/reporting/src/react-app-env.d.ts deleted file mode 100644 index 6431bc5fc..000000000 --- a/packages/reporting/src/react-app-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/packages/reporting/src/serviceWorker.ts b/packages/reporting/src/serviceWorker.ts deleted file mode 100644 index 0b72299f9..000000000 --- a/packages/reporting/src/serviceWorker.ts +++ /dev/null @@ -1,139 +0,0 @@ -// This optional code is used to register a service worker. -// register() is not called by default. - -// This lets the app load faster on subsequent visits in production, and gives -// it offline capabilities. However, it also means that developers (and users) -// will only see deployed updates on subsequent visits to a page, after all the -// existing tabs open on the page have been closed, since previously cached -// resources are updated in the background. - -// To learn more about the benefits of this model and instructions on how to -// opt-in, read https://bit.ly/CRA-PWA - -const isLocalhost = Boolean( - window.location.hostname === 'localhost' || - // [::1] is the IPv6 localhost address. - window.location.hostname === '[::1]' || - // 127.0.0.1/8 is considered localhost for IPv4. - window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/), -); - -type Config = { - onSuccess?: (registration: ServiceWorkerRegistration) => void; - onUpdate?: (registration: ServiceWorkerRegistration) => void; -}; - -export function register(config?: Config) { - if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { - // The URL constructor is available in all browsers that support SW. - const publicUrl = new URL( - (process as { env: { [key: string]: string } }).env.PUBLIC_URL, - window.location.href, - ); - if (publicUrl.origin !== window.location.origin) { - // Our service worker won't work if PUBLIC_URL is on a different origin - // from what our page is served on. This might happen if a CDN is used to - // serve assets; see https://github.com/facebook/create-react-app/issues/2374 - return; - } - - window.addEventListener('load', () => { - const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; - - if (isLocalhost) { - // This is running on localhost. Let's check if a service worker still exists or not. - checkValidServiceWorker(swUrl, config); - - // Add some additional logging to localhost, pointing developers to the - // service worker/PWA documentation. - navigator.serviceWorker.ready.then(() => { - console.log( - 'This web app is being served cache-first by a service ' + - 'worker. To learn more, visit https://bit.ly/CRA-PWA', - ); - }); - } else { - // Is not localhost. Just register service worker - registerValidSW(swUrl, config); - } - }); - } -} - -function registerValidSW(swUrl: string, config?: Config) { - navigator.serviceWorker - .register(swUrl) - .then((registration) => { - registration.onupdatefound = () => { - const installingWorker = registration.installing; - if (installingWorker == null) { - return; - } - installingWorker.onstatechange = () => { - if (installingWorker.state === 'installed') { - if (navigator.serviceWorker.controller) { - // At this point, the updated precached content has been fetched, - // but the previous service worker will still serve the older - // content until all client tabs are closed. - console.log( - 'New content is available and will be used when all ' + - 'tabs for this page are closed. See https://bit.ly/CRA-PWA.', - ); - - // Execute callback - if (config && config.onUpdate) { - config.onUpdate(registration); - } - } else { - // At this point, everything has been precached. - // It's the perfect time to display a - // "Content is cached for offline use." message. - console.log('Content is cached for offline use.'); - - // Execute callback - if (config && config.onSuccess) { - config.onSuccess(registration); - } - } - } - }; - }; - }) - .catch((error) => { - console.error('Error during service worker registration:', error); - }); -} - -function checkValidServiceWorker(swUrl: string, config?: Config) { - // Check if the service worker can be found. If it can't reload the page. - fetch(swUrl) - .then((response) => { - // Ensure service worker exists, and that we really are getting a JS file. - const contentType = response.headers.get('content-type'); - if ( - response.status === 404 || - (contentType != null && contentType.indexOf('javascript') === -1) - ) { - // No service worker found. Probably a different app. Reload the page. - navigator.serviceWorker.ready.then((registration) => { - registration.unregister().then(() => { - window.location.reload(); - }); - }); - } else { - // Service worker found. Proceed as normal. - registerValidSW(swUrl, config); - } - }) - .catch(() => { - console.log('No internet connection found. App is running in offline mode.'); - }); -} - -export function unregister() { - if ('serviceWorker' in navigator) { - navigator.serviceWorker.ready.then((registration) => { - registration.unregister(); - }); - } -} diff --git a/packages/reporting/src/setupTests.ts b/packages/reporting/src/setupTests.ts deleted file mode 100644 index 1cbd5760d..000000000 --- a/packages/reporting/src/setupTests.ts +++ /dev/null @@ -1,7 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; -// To fix `Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)` This happens after react-script versions >3.5 -import 'jest-canvas-mock'; diff --git a/packages/reporting/src/stories/reports/reporter-side-bar.stories.tsx b/packages/reporting/src/stories/reports/reporter-side-bar.stories.tsx deleted file mode 100644 index 839b25b0a..000000000 --- a/packages/reporting/src/stories/reports/reporter-side-bar.stories.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react'; -import { ReportDashboard } from '../../components/report-dashboard'; -import { buildReportMenuStructure } from '../../components/reporter-side-bar-structure'; - -export default { - title: 'Reports', - component: ReportDashboard, -}; - -export const StaticReportsView = () => ( - -); diff --git a/packages/reporting/src/tests/components/app.test.tsx b/packages/reporting/src/tests/components/app.test.tsx deleted file mode 100644 index 7e71aa6d8..000000000 --- a/packages/reporting/src/tests/components/app.test.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; -import { render } from '@testing-library/react'; -import App from '../../components/app'; - -test('smoke test', () => { - render(); -}); diff --git a/packages/reporting/src/tests/components/report-dashboard.test.tsx b/packages/reporting/src/tests/components/report-dashboard.test.tsx deleted file mode 100644 index 88e779d46..000000000 --- a/packages/reporting/src/tests/components/report-dashboard.test.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { render, screen, cleanup } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { ReportDashboard } from '../../components/report-dashboard'; -import { buildReportMenuStructure } from '../../components/reporter-side-bar-structure'; - -describe('ReportDashboard', () => { - beforeEach(() => { - render(); - }); - - afterEach(() => cleanup()); - - it('shows the report picker side bar on start', () => { - expect(screen.getByText('All logs')).toBeTruthy(); - }); - - it('closes the side-bar correctly', async () => { - // To check that it's open - expect(screen.getByText('All logs')).toBeTruthy(); - userEvent.click(screen.getByLabelText('close drawer')); - expect(screen.queryByText('All logs')).toBeFalsy(); - }); - - it('it closes side-bar and opens it correctly', async () => { - // To check that it's open - expect(screen.getByText('All logs')).toBeTruthy(); - userEvent.click(screen.getByLabelText('close drawer')); - // To check that it's closed - expect(screen.queryByText('All logs')).toBeFalsy(); - - userEvent.click(screen.getByLabelText('open drawer')); - expect(screen.queryByText('All logs')).toBeTruthy(); - }); -}); - -it('picks a different report and renders correctly', () => { - render(); - userEvent.click(screen.getByText('Doors')); - expect(screen.getByText('Reports - Door State Report')); -}); diff --git a/packages/reporting/src/util/url.ts b/packages/reporting/src/util/url.ts deleted file mode 100644 index 328cdb5b1..000000000 --- a/packages/reporting/src/util/url.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const BASE_PATH = - process.env.PUBLIC_URL === undefined || process.env.PUBLIC_URL === '/' - ? '' - : process.env.PUBLIC_URL; -export const DASHBOARD_ROUTE = BASE_PATH === '' ? '/' : BASE_PATH; -export const LOGIN_ROUTE = `${BASE_PATH}/login`; diff --git a/packages/reporting/tsconfig.json b/packages/reporting/tsconfig.json deleted file mode 100644 index e18c413eb..000000000 --- a/packages/reporting/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "noFallthroughCasesInSwitch": true - }, - "include": [ - "src" - ] -} diff --git a/packages/reporting-server/models/__init__.py b/packages/ros-translator/build/lib/ros_translator/__init__.py similarity index 100% rename from packages/reporting-server/models/__init__.py rename to packages/ros-translator/build/lib/ros_translator/__init__.py diff --git a/packages/ros-translator/build/lib/ros_translator/__main__.py b/packages/ros-translator/build/lib/ros_translator/__main__.py new file mode 100644 index 000000000..f8384b170 --- /dev/null +++ b/packages/ros-translator/build/lib/ros_translator/__main__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 + +import argparse +import importlib +import os +import os.path + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "-t", + "--target", + help="target language", + required=True, + ) + parser.add_argument( + "-o", + "--outdir", + help="Output directory", + required=True, + ) + parser.add_argument( + "pkgs", + help="ROS2 packages to generate files from", + nargs="+", + ) + args = parser.parse_args() + target = importlib.import_module(f"ros_translator.{args.target}") + os.makedirs(args.outdir, exist_ok=True) + target.generate(args.pkgs, args.outdir) + + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass diff --git a/packages/ros-translator/build/lib/ros_translator/library.py b/packages/ros-translator/build/lib/ros_translator/library.py new file mode 100644 index 000000000..a703784ce --- /dev/null +++ b/packages/ros-translator/build/lib/ros_translator/library.py @@ -0,0 +1,217 @@ +import os.path +from dataclasses import dataclass +from typing import Any, Callable, Dict, Iterable, List, Optional, cast + +import ament_index_python +from rosidl_adapter.parser import ( + MessageSpecification, + ServiceSpecification, + parse_message_file, + parse_service_file, +) + + +@dataclass +class Interface: + pkg: str + file: str + base_dir: str + rel_dir: str + full_type: str + full_type_with_path: str + raw: str + + +@dataclass +class Message(Interface): + spec: MessageSpecification + dependent_types: List["Message"] + + +@dataclass +class Service(Interface): + spec: ServiceSpecification + + +@dataclass +class PackageIndex: + pkg_share_dir: str + messages: Dict[str, str] # dict of message type and the definition file + services: Dict[str, str] # dict of service type and the definition file + + +@dataclass +class PostProcessors: + message: Optional[Callable[[Message], Any]] = None + service: Optional[Callable[[Service], Any]] = None + + +class RosLibrary: + def __init__(self, post_processors: Optional[PostProcessors] = None): + self.post_processors = post_processors or PostProcessors() + self._messages = cast(Dict[str, Message], {}) + self._services = cast(Dict[str, Service], {}) + self._package_index = cast(Dict[str, PackageIndex], {}) + + def get_message(self, full_msg_type: str) -> Message: + """ + :param full_msg_type: The full message type .e.g "std_msgs/String" + """ + if full_msg_type not in self._messages: + self._messages[full_msg_type] = self._parse_message(full_msg_type) + return self._messages[full_msg_type] + + def get_all_interfaces(self, *pkgs: Iterable[str]) -> Dict[str, PackageIndex]: + """ + Recursively gets the package index for packages and their dependencies. + """ + all_pkgs = self.get_all_dependent_packages(*pkgs) + return {p: self.get_package_index(p) for p in all_pkgs} + + def get_service(self, full_srv_type: str) -> Service: + """ + :param full_srv_type: The full service type + """ + if full_srv_type not in self._services: + self._services[full_srv_type] = self._parse_service(full_srv_type) + return self._services[full_srv_type] + + def get_package_index(self, pkg_name: str) -> PackageIndex: + if pkg_name not in self._package_index: + self._package_index[pkg_name] = self._parse_rosidl_index(pkg_name) + return self._package_index[pkg_name] + + def get_all_dependent_packages(self, *pkgs: Iterable[str]) -> List[str]: + def recur(pkg_name_): + if pkg_name_ not in self._package_index: + self._package_index[pkg_name_] = self._parse_rosidl_index(pkg_name_) + pkg_index = self._package_index[pkg_name_] + msgs = [self.get_message(m) for m in pkg_index.messages] + dep_msgs = [] + for m in msgs: + dep_msgs.extend([dm for dm in m.dependent_types if dm.pkg != pkg_name_]) + dep_pkgs = {} + for m in dep_msgs: + for dp in recur(m.pkg): + dep_pkgs[dp] = dp + dep_pkgs[m.pkg] = m.pkg + return dep_pkgs + + all_dep_pkgs = {} + for p in pkgs: + for dp in recur(p): + all_dep_pkgs[dp] = dp + all_dep_pkgs[p] = p + return list(all_dep_pkgs.keys()) + + @staticmethod + def _parse_rosidl_index(package: str): + base_dir = ament_index_python.get_package_share_directory(package) + messages = {} + services = {} + interfaces = ament_index_python.get_resource("rosidl_interfaces", package)[ + 0 + ].split("\n") + for i in interfaces: + if i.endswith(".msg"): + short_type = i[i.rindex("/") + 1 : i.rindex(".")] + full_type = f"{package}/{short_type}" + messages[full_type] = f"{base_dir}/{i}" + if i.endswith(".srv"): + short_type = i[i.rindex("/") + 1 : i.rindex(".")] + full_type = f"{package}/{short_type}" + services[full_type] = f"{base_dir}/{i}" + return PackageIndex( + pkg_share_dir=base_dir, + messages=messages, + services=services, + ) + + @staticmethod + def _get_full_type_with_path( + package: str, file: str, base_dir: dir, short_type: str + ): + rel_path = os.path.relpath(file, base_dir) + return f"{package}/{rel_path[:rel_path.rindex('/')]}/{short_type}" + + @staticmethod + def _get_rel_dir(full_type_with_path: str): + return f"{full_type_with_path[full_type_with_path.index('/')+1:full_type_with_path.rindex('/')]}" + + def _get_msg_dependent_types(self, msgspec: MessageSpecification): + dependent_types = [ + f"{f.type.pkg_name}/{f.type.type}" + for f in msgspec.fields + if not f.type.is_primitive_type() + ] + dedup = {f: f for f in dependent_types} + return [self.get_message(m) for m in dedup.keys()] + + def _parse_message(self, full_msg_type: str): + parts = full_msg_type.split("/") + if len(parts) != 2: + raise RuntimeError("message type must be in the form '/'") + package = parts[0] + + if package not in self._package_index: + self._package_index[package] = self._parse_rosidl_index(package) + + file = self._package_index[package].messages[full_msg_type] + base_dir = self._package_index[package].pkg_share_dir + spec = parse_message_file(package, file) + full_type_with_path = self._get_full_type_with_path( + package, + file, + base_dir, + spec.base_type.type, + ) + with open(file, "r") as f: + raw = f.read() + message = Message( + pkg=package, + file=file, + base_dir=base_dir, + rel_dir=self._get_rel_dir(full_type_with_path), + full_type=full_msg_type, + full_type_with_path=full_type_with_path, + raw=raw, + spec=spec, + dependent_types=self._get_msg_dependent_types(spec), + ) + if self.post_processors.message: + message = self.post_processors.message(message) + return message + + def _parse_service(self, full_srv_type: str): + parts = full_srv_type.split("/") + if len(parts) != 2: + raise RuntimeError("service type must be in the form '/'") + package = parts[0] + + if package not in self._package_index: + self._package_index[package] = self._parse_rosidl_index(package) + + file = self._package_index[package].services[full_srv_type] + base_dir = self._package_index[package].pkg_share_dir + spec = parse_service_file(package, file) + full_type_with_path = self._get_full_type_with_path( + package, + file, + base_dir, + spec.srv_name, + ) + with open(file, "r") as f: + raw = f.read() + service = Service( + pkg=package, + file=file, + base_dir=base_dir, + rel_dir=self._get_rel_dir(full_type_with_path), + full_type=full_srv_type, + full_type_with_path=full_type_with_path, + spec=spec, + raw=raw, + ) + if self.post_processors.service: + service = self.post_processors.service(service) + return service diff --git a/packages/ros-translator/build/lib/ros_translator/pydantic/__init__.py b/packages/ros-translator/build/lib/ros_translator/pydantic/__init__.py new file mode 100644 index 000000000..3bcfd70eb --- /dev/null +++ b/packages/ros-translator/build/lib/ros_translator/pydantic/__init__.py @@ -0,0 +1,142 @@ +from os import makedirs +from os.path import dirname +from os.path import join as joinp +from typing import Sequence + +from jinja2 import Environment, FileSystemLoader +from ros_translator.library import Message, PackageIndex, PostProcessors, RosLibrary + +template_loader = FileSystemLoader(searchpath=dirname(__file__)) +template_env = Environment(loader=template_loader) +template_env.trim_blocks = True +template_env.keep_trailing_newline = True + +PRIMITIVE_TYPES = { + "bool": "bool", + "byte": "pydantic.conint(ge=0, le=255)", + "char": "pydantic.conint(ge=0, le=255)", + "float32": "float", + "float64": "float", + "int8": "pydantic.conint(ge=-128, le=127)", + "int16": "pydantic.conint(ge=-32768, le=32767)", + "int32": "pydantic.conint(ge=-2147483648, le=2147483647)", + "int64": "int", + "string": "str", + "wstring": "str", + "uint8": "pydantic.conint(ge=0, le=255)", + "uint16": "pydantic.conint(ge=0, le=65535)", + "uint32": "pydantic.conint(ge=0, le=4294967295)", + "uint64": "pydantic.conint(ge=0, le=18446744073709551615)", +} + +DEFAULT_VALUES = { + "bool": "False", + "byte": "0", + "char": "0", + "float32": "0", + "float64": "0", + "int8": "0", + "int16": "0", + "int32": "0", + "int64": "0", + "string": '""', + "wstring": '""', + "uint8": "0", + "uint16": "0", + "uint32": "0", + "uint64": "0", +} + +ARRAY_TYPES = { + "char": "bytes", + "byte": "bytes", + "uint8": "bytes", +} + +DEFAULT_ARRAY_VALUES = { + "char": "bytes()", + "byte": "bytes()", + "uint8": "bytes()", +} + + +class PydanticType: + type: str + default_value: str + + def __init__(self, ros_type): + if ros_type.is_array: + self._init_array_type(ros_type) + return + + if ros_type.is_primitive_type(): + self.type = PRIMITIVE_TYPES[ros_type.type] + self.default_value = DEFAULT_VALUES[ros_type.type] + else: + self.type = ros_type.type + self.default_value = f"{ros_type.type}()" + + def _get_array_type(self, ros_type, elem_type): + if ros_type.is_upper_bound: + return f"pydantic.conlist(item_type={elem_type}, max_items={ros_type.array_size}" + elif ros_type.array_size: + return f"pydantic.conlist(item_type={elem_type}, min_items={ros_type.array_size}, max_items={ros_type.array_size}" + else: + return f"List[{elem_type}]" + + def _init_array_type(self, ros_type): + if ros_type.is_primitive_type(): + if ros_type.type in ARRAY_TYPES: + self.type = ARRAY_TYPES[ros_type.type] + self.default_value = DEFAULT_ARRAY_VALUES[ros_type.type] + else: + self.type = self._get_array_type( + ros_type, PRIMITIVE_TYPES[ros_type.type] + ) + self.default_value = "[]" + else: + self.type = self._get_array_type(ros_type, ros_type.type) + self.default_value = "[]" + + +def augment_message(msg: Message): + for field in msg.spec.fields: + field.pydantic_type = PydanticType(field.type) + msg.commented_raw = "".join( + map(lambda x: f"# {x}", msg.raw.splitlines(keepends=True)) + ) + return msg + + +def generate_messages(roslib: RosLibrary, pkg: str, outdir: str): + template = template_env.get_template("msg.j2") + pkg_index = roslib.get_package_index(pkg) + for msg_type in pkg_index.messages: + msg = roslib.get_message(msg_type) + outpath = joinp(outdir, msg.pkg, f"{msg.spec.base_type.type}.py") + print(outpath) + template.stream(msg=msg).dump(outpath) + + +def generate_modules(pkgs: Sequence[str], outdir: str): + roslib = RosLibrary(post_processors=PostProcessors(message=augment_message)) + all_pkg_index = roslib.get_all_interfaces(*pkgs) + + with open(joinp(outdir, "__init__.py"), "w", encoding="utf-8"): + pass + for pkg_name, pkg_index in all_pkg_index.items(): + pkg_index: PackageIndex + pkg_outdir = joinp(outdir, pkg_name) + makedirs(pkg_outdir, exist_ok=True) + with open(joinp(pkg_outdir, "__init__.py"), "w", encoding="utf-8") as f: + for msg in ( + roslib.get_message(msg_type) for msg_type in pkg_index.messages + ): + short_type = msg.spec.base_type.type + f.write(f"from .{short_type} import {short_type}\n") + generate_messages(roslib, pkg_name, outdir) + + +def generate(pkgs: Sequence[str], outdir: str): + print("Generating pydantic interfaces") + generate_modules(pkgs, outdir) diff --git a/packages/ros-translator/build/lib/ros_translator/pydantic/msg.j2 b/packages/ros-translator/build/lib/ros_translator/pydantic/msg.j2 new file mode 100644 index 000000000..235f09ce2 --- /dev/null +++ b/packages/ros-translator/build/lib/ros_translator/pydantic/msg.j2 @@ -0,0 +1,30 @@ +# This is a generated file, do not edit + +from typing import List + +import pydantic +{% for dep_msg in msg.dependent_types %} +from ..{{ dep_msg.spec.base_type.pkg_name }}.{{ dep_msg.spec.base_type.type }} import {{ dep_msg.spec.base_type.type }} +{% endfor %} + + +class {{ msg.spec.base_type.type }}(pydantic.BaseModel): +{% for field in msg.spec.fields %} + {{ field.name }}: {{ field.pydantic_type.type }} = {{ field.pydantic_type.default_value }} # {% if field.type.pkg_name %}{{ field.type.pkg_name }}/{% endif %}{{ field.type.type }} +{% endfor %} +{% if not msg.spec.fields %} + pass +{% endif %} + + class Config: + orm_mode = True + schema_extra = { + "required": [ +{% for field in msg.spec.fields %} + "{{ field.name }}", +{% endfor %} + ], + } + + +{{ msg.commented_raw }} \ No newline at end of file diff --git a/packages/ros-translator/build/lib/ros_translator/ros_types.py b/packages/ros-translator/build/lib/ros_translator/ros_types.py new file mode 100644 index 000000000..5b9412b28 --- /dev/null +++ b/packages/ros-translator/build/lib/ros_translator/ros_types.py @@ -0,0 +1,17 @@ +ROS_TYPES = [ + "bool", + "byte", + "char", + "float32", + "float64", + "int8", + "int16", + "int32", + "int64", + "string", + "wstring", + "uint8", + "uint16", + "uint32", + "uint64", +] diff --git a/packages/ros-translator/build/lib/ros_translator/typescript/__init__.py b/packages/ros-translator/build/lib/ros_translator/typescript/__init__.py new file mode 100644 index 000000000..b6ef763cf --- /dev/null +++ b/packages/ros-translator/build/lib/ros_translator/typescript/__init__.py @@ -0,0 +1,179 @@ +import argparse +import sys +from copy import copy +from os import makedirs +from os.path import basename, dirname, exists +from os.path import join as joinp +from typing import List, Sequence + +import jinja2 +from jinja2 import Environment, FileSystemLoader +from ros_translator.library import Message, PostProcessors, RosLibrary, Service + +template_loader = FileSystemLoader(searchpath=joinp(dirname(__file__), "templates")) +template_env = Environment(loader=template_loader) +template_env.trim_blocks = True +template_env.keep_trailing_newline = True + + +# These types does not need a 'new' keyword +PRIMITIVE_TYPES = { + "bool": "boolean", + "byte": "number", + "char": "number", + "float32": "number", + "float64": "number", + "int8": "number", + "int16": "number", + "int32": "number", + "int64": "number", + "string": "string", + "wstring": "string", + "uint8": "number", + "uint16": "number", + "uint32": "number", + "uint64": "number", +} + +PRIMITIVE_JS_TYPES = [ + "string", + "boolean", + "number", +] + +PRIMITIVE_TYPES_DEFAULT_VALUES = { + "bool": "false", + "byte": "0", + "char": "0", + "float32": "0", + "float64": "0", + "int8": "0", + "int16": "0", + "int32": "0", + "int64": "0", + "string": "''", + "wstring": "''", + "uint8": "0", + "uint16": "0", + "uint32": "0", + "uint64": "0", +} + +TYPED_ARRAY_TYPES = { + "char": "Uint8Array", + "byte": "Uint8Array", + "float32": "Float32Array", + "float64": "Float64Array", + "int8": "Int8Array", + "int16": "Int16Array", + "int32": "Int32Array", + "int64": "BigInt64Array", + "uint8": "Uint8Array", + "uint16": "Uint16Array", + "uint32": "Uint32Array", + "uint64": "BigUint64Array", +} + + +class JsType: + def __init__(self, ros_type): + self.type = None + self.base_type = None + self.is_primitive = False + self.is_typed_array = False + self.is_array = False + self.default_value = None + if hasattr(ros_type, "is_array") and ros_type.is_array: + self.type = TYPED_ARRAY_TYPES.get(ros_type.type) + self.default_value = "[]" + if self.type is None: + if ros_type.is_primitive_type(): + self.type = f"{PRIMITIVE_TYPES[ros_type.type]}[]" + else: + self.type = f"{ros_type.type}[]" + self.is_array = True + ros_element_type = copy(ros_type) + ros_element_type.is_array = False + self.element_type = JsType(ros_element_type) + else: + self.is_typed_array = True + self.base_type = self.type[: len(self.type) - 2] + else: + self.type = PRIMITIVE_TYPES.get(ros_type.type) + if ros_type.is_primitive_type(): + self.default_value = PRIMITIVE_TYPES_DEFAULT_VALUES[ros_type.type] + else: + self.default_value = f"new {ros_type.type}()" + if self.type is None: + self.type = ros_type.type + self.base_type = self.type + self.is_primitive = self.base_type in PRIMITIVE_JS_TYPES + + +def augment_message(msg: Message): + for f in msg.spec.fields: + f.js_type = JsType(f.type) + return msg + + +def generate_modules(pkgs: Sequence[str], dstdir: str): + roslib = RosLibrary(post_processors=PostProcessors(message=augment_message)) + all_pkgs = roslib.get_all_dependent_packages(*pkgs) + all_pkg_index = [roslib.get_package_index(p) for p in all_pkgs] + all_messages: List[Message] = [] + for p in all_pkg_index: + all_messages.extend((roslib.get_message(m) for m in p.messages)) + + all_services: List[Service] = [] + for p in all_pkg_index: + all_services.extend((roslib.get_service(s) for s in p.services)) + + template = template_env.get_template("ts-definition.j2") + modules = [] + + for msg in all_messages: + if not isinstance(msg.spec, str): + base_type = msg.spec.base_type + pkg_name = base_type.pkg_name + output_fpath = joinp( + dstdir, pkg_name, msg.rel_dir, f"{msg.spec.base_type.type}.ts" + ) + + if not exists(dirname(output_fpath)): + makedirs(dirname(output_fpath)) + + print(f"Generating model {base_type}") + template.stream(msg=msg).dump(output_fpath) + modules.append(f"./{pkg_name}/{msg.rel_dir}/{base_type.type}") + + template = template_env.get_template("srv-ts-definition.j2") + for srv in all_services: + if not isinstance(srv.spec, str): + output_fpath = joinp( + dstdir, srv.spec.pkg_name, srv.rel_dir, f"{srv.spec.srv_name}.ts" + ) + + if not exists(dirname(output_fpath)): + makedirs(dirname(output_fpath)) + + print(f"Generating model {srv.full_type}") + template.stream(srv=srv).dump(output_fpath) + modules.append(f"./{srv.spec.pkg_name}/{srv.rel_dir}/{srv.spec.srv_name}") + return modules + + +def generate_index(modules, dstdir): + template = template_env.get_template("index.j2") + + output_fpath = joinp(dstdir, "index.ts") + template.stream( + modules=modules, + ).dump(output_fpath) + + +def generate(pkgs: Sequence[str], outdir: str): + print("Generating typescript interfaces") + modules = generate_modules(pkgs, outdir) + print("Generating index") + generate_index(modules, outdir) + print("Successfully generated typings") diff --git a/packages/ros-translator/build/lib/ros_translator/typescript/templates/index.j2 b/packages/ros-translator/build/lib/ros_translator/typescript/templates/index.j2 new file mode 100644 index 000000000..c29320537 --- /dev/null +++ b/packages/ros-translator/build/lib/ros_translator/typescript/templates/index.j2 @@ -0,0 +1,5 @@ +/* This is a generated file, do not edit */ + +{% for module in modules %} +export * from '{{ module }}'; +{% endfor %} diff --git a/packages/ros-translator/build/lib/ros_translator/typescript/templates/srv-ts-definition.j2 b/packages/ros-translator/build/lib/ros_translator/typescript/templates/srv-ts-definition.j2 new file mode 100644 index 000000000..4b71a7c6b --- /dev/null +++ b/packages/ros-translator/build/lib/ros_translator/typescript/templates/srv-ts-definition.j2 @@ -0,0 +1,10 @@ +/* This is a generated file, do not edit */ + +import { {{ srv.spec.srv_name }}_Request } from './{{ srv.spec.srv_name }}_Request'; +import { {{ srv.spec.srv_name }}_Response } from './{{ srv.spec.srv_name }}_Response'; + +export class {{ srv.spec.srv_name }} { + static readonly FullServiceName = '{{ srv.spec.pkg_name }}/{{ srv.rel_dir }}/{{ srv.spec.srv_name }}'; + static readonly Request = {{ srv.spec.srv_name }}_Request; + static readonly Response = {{ srv.spec.srv_name }}_Response; +} diff --git a/packages/ros-translator/build/lib/ros_translator/typescript/templates/ts-definition.j2 b/packages/ros-translator/build/lib/ros_translator/typescript/templates/ts-definition.j2 new file mode 100644 index 000000000..6b00e358c --- /dev/null +++ b/packages/ros-translator/build/lib/ros_translator/typescript/templates/ts-definition.j2 @@ -0,0 +1,97 @@ +{% set msgspec = msg.spec %} +{% set base_type = msgspec.base_type %} +/* This is a generated file, do not edit */ + +{% for dep_msg in msg.dependent_types %} +import { {{ dep_msg.spec.base_type.type }} } from '../../{{ dep_msg.spec.base_type.pkg_name }}/{{ dep_msg.rel_dir }}/{{ dep_msg.spec.base_type.type }}'; +{% endfor %} + +export class {{ base_type.type }} { + static readonly FullTypeName = '{{ base_type.pkg_name }}/{{ msg.rel_dir }}/{{ base_type.type }}'; + +{% if msgspec.constants %} +{% for const in msgspec.constants %} + static readonly {{ const.name }} = {{ const.value }}; +{% endfor %} +{% endif %} + +{% for field in msgspec.fields %} +{% if field.js_type.is_typed_array %} + {{ field.name }}: {{ field.js_type.type }} | number[]; +{% else %} + {{ field.name }}: {{ field.js_type.type }}; +{% endif %} +{% endfor %} + + constructor(fields: Partial<{{ base_type.type }}> = {}) { +{% for field in msgspec.fields %} + this.{{ field.name }} = fields.{{ field.name }} || {{ field.js_type.default_value }}; +{% endfor %} + } + + static validate(obj: Record): void { +{% for field in msgspec.fields %} +{% if field.type.is_array %} +{% if field.js_type.is_typed_array %} + if (!(obj['{{ field.name }}'] instanceof {{ field.js_type.type }}) && !Array.isArray(obj['{{ field.name }}'])) { + throw new Error('expected "{{ field.name }}" to be "{{ field.js_type.type }}" or an array'); + } +{% else %} + if (!Array.isArray(obj['{{ field.name }}'])) { + throw new Error('expected "{{ field.name }}" to be an array'); + } +{% endif %} +{% if field.type.is_upper_bound %} + if (obj['{{ field.name }}'].length > {{ field.type.array_size }}) { + throw new Error('"{{ field.name }}" exceeds the upper bound of {{ field.type.array_size }}') + } +{% elif field.type.array_size %} + if (obj['{{ field.name }}'].length != {{ field.type.array_size }}) { + throw new Error('"{{ field.name }}" must have length of {{ field.type.array_size }}'); + } +{% endif %} +{% if field.js_type.is_typed_array %} + if (Array.isArray(obj['{{ field.name }}'])) { + for (const [i, v] of obj['{{ field.name }}'].entries()) { + if (typeof v !== 'number') { + throw new Error(`expected index ${i} of "{{ field.name }}" to be "number"`); + } + } + } +{% else %} +{% if field.js_type.is_primitive %} + for (const [i, v] of obj['{{ field.name }}'].entries()) { + if (typeof v !== '{{ field.js_type.element_type.type }}') { + throw new Error(`expected index ${i} of "{{ field.name }}" to be "{{ field.js_type.element_type.type }}"`); + } + } +{% else %} + for (const [i, v] of obj['{{ field.name }}'].entries()) { + try { + {{ field.type.type }}.validate(v) + } catch (e) { + throw new Error(`in index ${i} of "{{ field.name }}":\n ` + (e as Error).message); + } + } +{% endif %} +{% endif %} +{% else %} +{% if field.js_type.is_primitive %} + if (typeof obj['{{ field.name }}'] !== '{{ field.js_type.type }}') { + throw new Error('expected "{{ field.name }}" to be "{{ field.js_type.type }}"'); + } +{% else %} + try { + {{ field.type.type }}.validate(obj['{{ field.name }}'] as Record); + } catch (e) { + throw new Error('in "{{ field.name }}":\n ' + (e as Error).message); + } +{% endif %} +{% endif %} +{% endfor %} + } +} + +/* +{{ msg.raw }} +*/ diff --git a/scripts/generate-pylintrc.js b/scripts/generate-pylintrc.js index 24dd99f82..04893461a 100644 --- a/scripts/generate-pylintrc.js +++ b/scripts/generate-pylintrc.js @@ -7,10 +7,7 @@ const { execSync } = require('child_process'); const fs = require('fs'); fs.copyFileSync(`${__dirname}/base.pylintrc`, `${__dirname}/../packages/api-server/.pylintrc`); -fs.copyFileSync( - `${__dirname}/base.pylintrc`, - `${__dirname}/../packages/reporting-server/.pylintrc`, -); +fs.copyFileSync(`${__dirname}/base.pylintrc`); fs.copyFileSync(`${__dirname}/base.pylintrc`, `${__dirname}/../packages/ros-translator/.pylintrc`); let result = execSync( `pipenv run pylint --rcfile=${__dirname}/base.pylintrc --ignore=CVS,test --generate-rcfile`, From 16185d8b705adb0b4dfab3137baadb8b98eeacdb Mon Sep 17 00:00:00 2001 From: Teo Koon Peng Date: Tue, 1 Mar 2022 14:10:55 +0800 Subject: [PATCH 2/2] remove accidently committed build files Signed-off-by: Teo Koon Peng --- .../build/lib/ros_translator/__init__.py | 0 .../build/lib/ros_translator/__main__.py | 38 --- .../build/lib/ros_translator/library.py | 217 ------------------ .../lib/ros_translator/pydantic/__init__.py | 142 ------------ .../build/lib/ros_translator/pydantic/msg.j2 | 30 --- .../build/lib/ros_translator/ros_types.py | 17 -- .../lib/ros_translator/typescript/__init__.py | 179 --------------- .../typescript/templates/index.j2 | 5 - .../typescript/templates/srv-ts-definition.j2 | 10 - .../typescript/templates/ts-definition.j2 | 97 -------- 10 files changed, 735 deletions(-) delete mode 100644 packages/ros-translator/build/lib/ros_translator/__init__.py delete mode 100644 packages/ros-translator/build/lib/ros_translator/__main__.py delete mode 100644 packages/ros-translator/build/lib/ros_translator/library.py delete mode 100644 packages/ros-translator/build/lib/ros_translator/pydantic/__init__.py delete mode 100644 packages/ros-translator/build/lib/ros_translator/pydantic/msg.j2 delete mode 100644 packages/ros-translator/build/lib/ros_translator/ros_types.py delete mode 100644 packages/ros-translator/build/lib/ros_translator/typescript/__init__.py delete mode 100644 packages/ros-translator/build/lib/ros_translator/typescript/templates/index.j2 delete mode 100644 packages/ros-translator/build/lib/ros_translator/typescript/templates/srv-ts-definition.j2 delete mode 100644 packages/ros-translator/build/lib/ros_translator/typescript/templates/ts-definition.j2 diff --git a/packages/ros-translator/build/lib/ros_translator/__init__.py b/packages/ros-translator/build/lib/ros_translator/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ros-translator/build/lib/ros_translator/__main__.py b/packages/ros-translator/build/lib/ros_translator/__main__.py deleted file mode 100644 index f8384b170..000000000 --- a/packages/ros-translator/build/lib/ros_translator/__main__.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -import importlib -import os -import os.path - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument( - "-t", - "--target", - help="target language", - required=True, - ) - parser.add_argument( - "-o", - "--outdir", - help="Output directory", - required=True, - ) - parser.add_argument( - "pkgs", - help="ROS2 packages to generate files from", - nargs="+", - ) - args = parser.parse_args() - target = importlib.import_module(f"ros_translator.{args.target}") - os.makedirs(args.outdir, exist_ok=True) - target.generate(args.pkgs, args.outdir) - - -if __name__ == "__main__": - try: - main() - except KeyboardInterrupt: - pass diff --git a/packages/ros-translator/build/lib/ros_translator/library.py b/packages/ros-translator/build/lib/ros_translator/library.py deleted file mode 100644 index a703784ce..000000000 --- a/packages/ros-translator/build/lib/ros_translator/library.py +++ /dev/null @@ -1,217 +0,0 @@ -import os.path -from dataclasses import dataclass -from typing import Any, Callable, Dict, Iterable, List, Optional, cast - -import ament_index_python -from rosidl_adapter.parser import ( - MessageSpecification, - ServiceSpecification, - parse_message_file, - parse_service_file, -) - - -@dataclass -class Interface: - pkg: str - file: str - base_dir: str - rel_dir: str - full_type: str - full_type_with_path: str - raw: str - - -@dataclass -class Message(Interface): - spec: MessageSpecification - dependent_types: List["Message"] - - -@dataclass -class Service(Interface): - spec: ServiceSpecification - - -@dataclass -class PackageIndex: - pkg_share_dir: str - messages: Dict[str, str] # dict of message type and the definition file - services: Dict[str, str] # dict of service type and the definition file - - -@dataclass -class PostProcessors: - message: Optional[Callable[[Message], Any]] = None - service: Optional[Callable[[Service], Any]] = None - - -class RosLibrary: - def __init__(self, post_processors: Optional[PostProcessors] = None): - self.post_processors = post_processors or PostProcessors() - self._messages = cast(Dict[str, Message], {}) - self._services = cast(Dict[str, Service], {}) - self._package_index = cast(Dict[str, PackageIndex], {}) - - def get_message(self, full_msg_type: str) -> Message: - """ - :param full_msg_type: The full message type .e.g "std_msgs/String" - """ - if full_msg_type not in self._messages: - self._messages[full_msg_type] = self._parse_message(full_msg_type) - return self._messages[full_msg_type] - - def get_all_interfaces(self, *pkgs: Iterable[str]) -> Dict[str, PackageIndex]: - """ - Recursively gets the package index for packages and their dependencies. - """ - all_pkgs = self.get_all_dependent_packages(*pkgs) - return {p: self.get_package_index(p) for p in all_pkgs} - - def get_service(self, full_srv_type: str) -> Service: - """ - :param full_srv_type: The full service type - """ - if full_srv_type not in self._services: - self._services[full_srv_type] = self._parse_service(full_srv_type) - return self._services[full_srv_type] - - def get_package_index(self, pkg_name: str) -> PackageIndex: - if pkg_name not in self._package_index: - self._package_index[pkg_name] = self._parse_rosidl_index(pkg_name) - return self._package_index[pkg_name] - - def get_all_dependent_packages(self, *pkgs: Iterable[str]) -> List[str]: - def recur(pkg_name_): - if pkg_name_ not in self._package_index: - self._package_index[pkg_name_] = self._parse_rosidl_index(pkg_name_) - pkg_index = self._package_index[pkg_name_] - msgs = [self.get_message(m) for m in pkg_index.messages] - dep_msgs = [] - for m in msgs: - dep_msgs.extend([dm for dm in m.dependent_types if dm.pkg != pkg_name_]) - dep_pkgs = {} - for m in dep_msgs: - for dp in recur(m.pkg): - dep_pkgs[dp] = dp - dep_pkgs[m.pkg] = m.pkg - return dep_pkgs - - all_dep_pkgs = {} - for p in pkgs: - for dp in recur(p): - all_dep_pkgs[dp] = dp - all_dep_pkgs[p] = p - return list(all_dep_pkgs.keys()) - - @staticmethod - def _parse_rosidl_index(package: str): - base_dir = ament_index_python.get_package_share_directory(package) - messages = {} - services = {} - interfaces = ament_index_python.get_resource("rosidl_interfaces", package)[ - 0 - ].split("\n") - for i in interfaces: - if i.endswith(".msg"): - short_type = i[i.rindex("/") + 1 : i.rindex(".")] - full_type = f"{package}/{short_type}" - messages[full_type] = f"{base_dir}/{i}" - if i.endswith(".srv"): - short_type = i[i.rindex("/") + 1 : i.rindex(".")] - full_type = f"{package}/{short_type}" - services[full_type] = f"{base_dir}/{i}" - return PackageIndex( - pkg_share_dir=base_dir, - messages=messages, - services=services, - ) - - @staticmethod - def _get_full_type_with_path( - package: str, file: str, base_dir: dir, short_type: str - ): - rel_path = os.path.relpath(file, base_dir) - return f"{package}/{rel_path[:rel_path.rindex('/')]}/{short_type}" - - @staticmethod - def _get_rel_dir(full_type_with_path: str): - return f"{full_type_with_path[full_type_with_path.index('/')+1:full_type_with_path.rindex('/')]}" - - def _get_msg_dependent_types(self, msgspec: MessageSpecification): - dependent_types = [ - f"{f.type.pkg_name}/{f.type.type}" - for f in msgspec.fields - if not f.type.is_primitive_type() - ] - dedup = {f: f for f in dependent_types} - return [self.get_message(m) for m in dedup.keys()] - - def _parse_message(self, full_msg_type: str): - parts = full_msg_type.split("/") - if len(parts) != 2: - raise RuntimeError("message type must be in the form '/'") - package = parts[0] - - if package not in self._package_index: - self._package_index[package] = self._parse_rosidl_index(package) - - file = self._package_index[package].messages[full_msg_type] - base_dir = self._package_index[package].pkg_share_dir - spec = parse_message_file(package, file) - full_type_with_path = self._get_full_type_with_path( - package, - file, - base_dir, - spec.base_type.type, - ) - with open(file, "r") as f: - raw = f.read() - message = Message( - pkg=package, - file=file, - base_dir=base_dir, - rel_dir=self._get_rel_dir(full_type_with_path), - full_type=full_msg_type, - full_type_with_path=full_type_with_path, - raw=raw, - spec=spec, - dependent_types=self._get_msg_dependent_types(spec), - ) - if self.post_processors.message: - message = self.post_processors.message(message) - return message - - def _parse_service(self, full_srv_type: str): - parts = full_srv_type.split("/") - if len(parts) != 2: - raise RuntimeError("service type must be in the form '/'") - package = parts[0] - - if package not in self._package_index: - self._package_index[package] = self._parse_rosidl_index(package) - - file = self._package_index[package].services[full_srv_type] - base_dir = self._package_index[package].pkg_share_dir - spec = parse_service_file(package, file) - full_type_with_path = self._get_full_type_with_path( - package, - file, - base_dir, - spec.srv_name, - ) - with open(file, "r") as f: - raw = f.read() - service = Service( - pkg=package, - file=file, - base_dir=base_dir, - rel_dir=self._get_rel_dir(full_type_with_path), - full_type=full_srv_type, - full_type_with_path=full_type_with_path, - spec=spec, - raw=raw, - ) - if self.post_processors.service: - service = self.post_processors.service(service) - return service diff --git a/packages/ros-translator/build/lib/ros_translator/pydantic/__init__.py b/packages/ros-translator/build/lib/ros_translator/pydantic/__init__.py deleted file mode 100644 index 3bcfd70eb..000000000 --- a/packages/ros-translator/build/lib/ros_translator/pydantic/__init__.py +++ /dev/null @@ -1,142 +0,0 @@ -from os import makedirs -from os.path import dirname -from os.path import join as joinp -from typing import Sequence - -from jinja2 import Environment, FileSystemLoader -from ros_translator.library import Message, PackageIndex, PostProcessors, RosLibrary - -template_loader = FileSystemLoader(searchpath=dirname(__file__)) -template_env = Environment(loader=template_loader) -template_env.trim_blocks = True -template_env.keep_trailing_newline = True - -PRIMITIVE_TYPES = { - "bool": "bool", - "byte": "pydantic.conint(ge=0, le=255)", - "char": "pydantic.conint(ge=0, le=255)", - "float32": "float", - "float64": "float", - "int8": "pydantic.conint(ge=-128, le=127)", - "int16": "pydantic.conint(ge=-32768, le=32767)", - "int32": "pydantic.conint(ge=-2147483648, le=2147483647)", - "int64": "int", - "string": "str", - "wstring": "str", - "uint8": "pydantic.conint(ge=0, le=255)", - "uint16": "pydantic.conint(ge=0, le=65535)", - "uint32": "pydantic.conint(ge=0, le=4294967295)", - "uint64": "pydantic.conint(ge=0, le=18446744073709551615)", -} - -DEFAULT_VALUES = { - "bool": "False", - "byte": "0", - "char": "0", - "float32": "0", - "float64": "0", - "int8": "0", - "int16": "0", - "int32": "0", - "int64": "0", - "string": '""', - "wstring": '""', - "uint8": "0", - "uint16": "0", - "uint32": "0", - "uint64": "0", -} - -ARRAY_TYPES = { - "char": "bytes", - "byte": "bytes", - "uint8": "bytes", -} - -DEFAULT_ARRAY_VALUES = { - "char": "bytes()", - "byte": "bytes()", - "uint8": "bytes()", -} - - -class PydanticType: - type: str - default_value: str - - def __init__(self, ros_type): - if ros_type.is_array: - self._init_array_type(ros_type) - return - - if ros_type.is_primitive_type(): - self.type = PRIMITIVE_TYPES[ros_type.type] - self.default_value = DEFAULT_VALUES[ros_type.type] - else: - self.type = ros_type.type - self.default_value = f"{ros_type.type}()" - - def _get_array_type(self, ros_type, elem_type): - if ros_type.is_upper_bound: - return f"pydantic.conlist(item_type={elem_type}, max_items={ros_type.array_size}" - elif ros_type.array_size: - return f"pydantic.conlist(item_type={elem_type}, min_items={ros_type.array_size}, max_items={ros_type.array_size}" - else: - return f"List[{elem_type}]" - - def _init_array_type(self, ros_type): - if ros_type.is_primitive_type(): - if ros_type.type in ARRAY_TYPES: - self.type = ARRAY_TYPES[ros_type.type] - self.default_value = DEFAULT_ARRAY_VALUES[ros_type.type] - else: - self.type = self._get_array_type( - ros_type, PRIMITIVE_TYPES[ros_type.type] - ) - self.default_value = "[]" - else: - self.type = self._get_array_type(ros_type, ros_type.type) - self.default_value = "[]" - - -def augment_message(msg: Message): - for field in msg.spec.fields: - field.pydantic_type = PydanticType(field.type) - msg.commented_raw = "".join( - map(lambda x: f"# {x}", msg.raw.splitlines(keepends=True)) - ) - return msg - - -def generate_messages(roslib: RosLibrary, pkg: str, outdir: str): - template = template_env.get_template("msg.j2") - pkg_index = roslib.get_package_index(pkg) - for msg_type in pkg_index.messages: - msg = roslib.get_message(msg_type) - outpath = joinp(outdir, msg.pkg, f"{msg.spec.base_type.type}.py") - print(outpath) - template.stream(msg=msg).dump(outpath) - - -def generate_modules(pkgs: Sequence[str], outdir: str): - roslib = RosLibrary(post_processors=PostProcessors(message=augment_message)) - all_pkg_index = roslib.get_all_interfaces(*pkgs) - - with open(joinp(outdir, "__init__.py"), "w", encoding="utf-8"): - pass - for pkg_name, pkg_index in all_pkg_index.items(): - pkg_index: PackageIndex - pkg_outdir = joinp(outdir, pkg_name) - makedirs(pkg_outdir, exist_ok=True) - with open(joinp(pkg_outdir, "__init__.py"), "w", encoding="utf-8") as f: - for msg in ( - roslib.get_message(msg_type) for msg_type in pkg_index.messages - ): - short_type = msg.spec.base_type.type - f.write(f"from .{short_type} import {short_type}\n") - generate_messages(roslib, pkg_name, outdir) - - -def generate(pkgs: Sequence[str], outdir: str): - print("Generating pydantic interfaces") - generate_modules(pkgs, outdir) diff --git a/packages/ros-translator/build/lib/ros_translator/pydantic/msg.j2 b/packages/ros-translator/build/lib/ros_translator/pydantic/msg.j2 deleted file mode 100644 index 235f09ce2..000000000 --- a/packages/ros-translator/build/lib/ros_translator/pydantic/msg.j2 +++ /dev/null @@ -1,30 +0,0 @@ -# This is a generated file, do not edit - -from typing import List - -import pydantic -{% for dep_msg in msg.dependent_types %} -from ..{{ dep_msg.spec.base_type.pkg_name }}.{{ dep_msg.spec.base_type.type }} import {{ dep_msg.spec.base_type.type }} -{% endfor %} - - -class {{ msg.spec.base_type.type }}(pydantic.BaseModel): -{% for field in msg.spec.fields %} - {{ field.name }}: {{ field.pydantic_type.type }} = {{ field.pydantic_type.default_value }} # {% if field.type.pkg_name %}{{ field.type.pkg_name }}/{% endif %}{{ field.type.type }} -{% endfor %} -{% if not msg.spec.fields %} - pass -{% endif %} - - class Config: - orm_mode = True - schema_extra = { - "required": [ -{% for field in msg.spec.fields %} - "{{ field.name }}", -{% endfor %} - ], - } - - -{{ msg.commented_raw }} \ No newline at end of file diff --git a/packages/ros-translator/build/lib/ros_translator/ros_types.py b/packages/ros-translator/build/lib/ros_translator/ros_types.py deleted file mode 100644 index 5b9412b28..000000000 --- a/packages/ros-translator/build/lib/ros_translator/ros_types.py +++ /dev/null @@ -1,17 +0,0 @@ -ROS_TYPES = [ - "bool", - "byte", - "char", - "float32", - "float64", - "int8", - "int16", - "int32", - "int64", - "string", - "wstring", - "uint8", - "uint16", - "uint32", - "uint64", -] diff --git a/packages/ros-translator/build/lib/ros_translator/typescript/__init__.py b/packages/ros-translator/build/lib/ros_translator/typescript/__init__.py deleted file mode 100644 index b6ef763cf..000000000 --- a/packages/ros-translator/build/lib/ros_translator/typescript/__init__.py +++ /dev/null @@ -1,179 +0,0 @@ -import argparse -import sys -from copy import copy -from os import makedirs -from os.path import basename, dirname, exists -from os.path import join as joinp -from typing import List, Sequence - -import jinja2 -from jinja2 import Environment, FileSystemLoader -from ros_translator.library import Message, PostProcessors, RosLibrary, Service - -template_loader = FileSystemLoader(searchpath=joinp(dirname(__file__), "templates")) -template_env = Environment(loader=template_loader) -template_env.trim_blocks = True -template_env.keep_trailing_newline = True - - -# These types does not need a 'new' keyword -PRIMITIVE_TYPES = { - "bool": "boolean", - "byte": "number", - "char": "number", - "float32": "number", - "float64": "number", - "int8": "number", - "int16": "number", - "int32": "number", - "int64": "number", - "string": "string", - "wstring": "string", - "uint8": "number", - "uint16": "number", - "uint32": "number", - "uint64": "number", -} - -PRIMITIVE_JS_TYPES = [ - "string", - "boolean", - "number", -] - -PRIMITIVE_TYPES_DEFAULT_VALUES = { - "bool": "false", - "byte": "0", - "char": "0", - "float32": "0", - "float64": "0", - "int8": "0", - "int16": "0", - "int32": "0", - "int64": "0", - "string": "''", - "wstring": "''", - "uint8": "0", - "uint16": "0", - "uint32": "0", - "uint64": "0", -} - -TYPED_ARRAY_TYPES = { - "char": "Uint8Array", - "byte": "Uint8Array", - "float32": "Float32Array", - "float64": "Float64Array", - "int8": "Int8Array", - "int16": "Int16Array", - "int32": "Int32Array", - "int64": "BigInt64Array", - "uint8": "Uint8Array", - "uint16": "Uint16Array", - "uint32": "Uint32Array", - "uint64": "BigUint64Array", -} - - -class JsType: - def __init__(self, ros_type): - self.type = None - self.base_type = None - self.is_primitive = False - self.is_typed_array = False - self.is_array = False - self.default_value = None - if hasattr(ros_type, "is_array") and ros_type.is_array: - self.type = TYPED_ARRAY_TYPES.get(ros_type.type) - self.default_value = "[]" - if self.type is None: - if ros_type.is_primitive_type(): - self.type = f"{PRIMITIVE_TYPES[ros_type.type]}[]" - else: - self.type = f"{ros_type.type}[]" - self.is_array = True - ros_element_type = copy(ros_type) - ros_element_type.is_array = False - self.element_type = JsType(ros_element_type) - else: - self.is_typed_array = True - self.base_type = self.type[: len(self.type) - 2] - else: - self.type = PRIMITIVE_TYPES.get(ros_type.type) - if ros_type.is_primitive_type(): - self.default_value = PRIMITIVE_TYPES_DEFAULT_VALUES[ros_type.type] - else: - self.default_value = f"new {ros_type.type}()" - if self.type is None: - self.type = ros_type.type - self.base_type = self.type - self.is_primitive = self.base_type in PRIMITIVE_JS_TYPES - - -def augment_message(msg: Message): - for f in msg.spec.fields: - f.js_type = JsType(f.type) - return msg - - -def generate_modules(pkgs: Sequence[str], dstdir: str): - roslib = RosLibrary(post_processors=PostProcessors(message=augment_message)) - all_pkgs = roslib.get_all_dependent_packages(*pkgs) - all_pkg_index = [roslib.get_package_index(p) for p in all_pkgs] - all_messages: List[Message] = [] - for p in all_pkg_index: - all_messages.extend((roslib.get_message(m) for m in p.messages)) - - all_services: List[Service] = [] - for p in all_pkg_index: - all_services.extend((roslib.get_service(s) for s in p.services)) - - template = template_env.get_template("ts-definition.j2") - modules = [] - - for msg in all_messages: - if not isinstance(msg.spec, str): - base_type = msg.spec.base_type - pkg_name = base_type.pkg_name - output_fpath = joinp( - dstdir, pkg_name, msg.rel_dir, f"{msg.spec.base_type.type}.ts" - ) - - if not exists(dirname(output_fpath)): - makedirs(dirname(output_fpath)) - - print(f"Generating model {base_type}") - template.stream(msg=msg).dump(output_fpath) - modules.append(f"./{pkg_name}/{msg.rel_dir}/{base_type.type}") - - template = template_env.get_template("srv-ts-definition.j2") - for srv in all_services: - if not isinstance(srv.spec, str): - output_fpath = joinp( - dstdir, srv.spec.pkg_name, srv.rel_dir, f"{srv.spec.srv_name}.ts" - ) - - if not exists(dirname(output_fpath)): - makedirs(dirname(output_fpath)) - - print(f"Generating model {srv.full_type}") - template.stream(srv=srv).dump(output_fpath) - modules.append(f"./{srv.spec.pkg_name}/{srv.rel_dir}/{srv.spec.srv_name}") - return modules - - -def generate_index(modules, dstdir): - template = template_env.get_template("index.j2") - - output_fpath = joinp(dstdir, "index.ts") - template.stream( - modules=modules, - ).dump(output_fpath) - - -def generate(pkgs: Sequence[str], outdir: str): - print("Generating typescript interfaces") - modules = generate_modules(pkgs, outdir) - print("Generating index") - generate_index(modules, outdir) - print("Successfully generated typings") diff --git a/packages/ros-translator/build/lib/ros_translator/typescript/templates/index.j2 b/packages/ros-translator/build/lib/ros_translator/typescript/templates/index.j2 deleted file mode 100644 index c29320537..000000000 --- a/packages/ros-translator/build/lib/ros_translator/typescript/templates/index.j2 +++ /dev/null @@ -1,5 +0,0 @@ -/* This is a generated file, do not edit */ - -{% for module in modules %} -export * from '{{ module }}'; -{% endfor %} diff --git a/packages/ros-translator/build/lib/ros_translator/typescript/templates/srv-ts-definition.j2 b/packages/ros-translator/build/lib/ros_translator/typescript/templates/srv-ts-definition.j2 deleted file mode 100644 index 4b71a7c6b..000000000 --- a/packages/ros-translator/build/lib/ros_translator/typescript/templates/srv-ts-definition.j2 +++ /dev/null @@ -1,10 +0,0 @@ -/* This is a generated file, do not edit */ - -import { {{ srv.spec.srv_name }}_Request } from './{{ srv.spec.srv_name }}_Request'; -import { {{ srv.spec.srv_name }}_Response } from './{{ srv.spec.srv_name }}_Response'; - -export class {{ srv.spec.srv_name }} { - static readonly FullServiceName = '{{ srv.spec.pkg_name }}/{{ srv.rel_dir }}/{{ srv.spec.srv_name }}'; - static readonly Request = {{ srv.spec.srv_name }}_Request; - static readonly Response = {{ srv.spec.srv_name }}_Response; -} diff --git a/packages/ros-translator/build/lib/ros_translator/typescript/templates/ts-definition.j2 b/packages/ros-translator/build/lib/ros_translator/typescript/templates/ts-definition.j2 deleted file mode 100644 index 6b00e358c..000000000 --- a/packages/ros-translator/build/lib/ros_translator/typescript/templates/ts-definition.j2 +++ /dev/null @@ -1,97 +0,0 @@ -{% set msgspec = msg.spec %} -{% set base_type = msgspec.base_type %} -/* This is a generated file, do not edit */ - -{% for dep_msg in msg.dependent_types %} -import { {{ dep_msg.spec.base_type.type }} } from '../../{{ dep_msg.spec.base_type.pkg_name }}/{{ dep_msg.rel_dir }}/{{ dep_msg.spec.base_type.type }}'; -{% endfor %} - -export class {{ base_type.type }} { - static readonly FullTypeName = '{{ base_type.pkg_name }}/{{ msg.rel_dir }}/{{ base_type.type }}'; - -{% if msgspec.constants %} -{% for const in msgspec.constants %} - static readonly {{ const.name }} = {{ const.value }}; -{% endfor %} -{% endif %} - -{% for field in msgspec.fields %} -{% if field.js_type.is_typed_array %} - {{ field.name }}: {{ field.js_type.type }} | number[]; -{% else %} - {{ field.name }}: {{ field.js_type.type }}; -{% endif %} -{% endfor %} - - constructor(fields: Partial<{{ base_type.type }}> = {}) { -{% for field in msgspec.fields %} - this.{{ field.name }} = fields.{{ field.name }} || {{ field.js_type.default_value }}; -{% endfor %} - } - - static validate(obj: Record): void { -{% for field in msgspec.fields %} -{% if field.type.is_array %} -{% if field.js_type.is_typed_array %} - if (!(obj['{{ field.name }}'] instanceof {{ field.js_type.type }}) && !Array.isArray(obj['{{ field.name }}'])) { - throw new Error('expected "{{ field.name }}" to be "{{ field.js_type.type }}" or an array'); - } -{% else %} - if (!Array.isArray(obj['{{ field.name }}'])) { - throw new Error('expected "{{ field.name }}" to be an array'); - } -{% endif %} -{% if field.type.is_upper_bound %} - if (obj['{{ field.name }}'].length > {{ field.type.array_size }}) { - throw new Error('"{{ field.name }}" exceeds the upper bound of {{ field.type.array_size }}') - } -{% elif field.type.array_size %} - if (obj['{{ field.name }}'].length != {{ field.type.array_size }}) { - throw new Error('"{{ field.name }}" must have length of {{ field.type.array_size }}'); - } -{% endif %} -{% if field.js_type.is_typed_array %} - if (Array.isArray(obj['{{ field.name }}'])) { - for (const [i, v] of obj['{{ field.name }}'].entries()) { - if (typeof v !== 'number') { - throw new Error(`expected index ${i} of "{{ field.name }}" to be "number"`); - } - } - } -{% else %} -{% if field.js_type.is_primitive %} - for (const [i, v] of obj['{{ field.name }}'].entries()) { - if (typeof v !== '{{ field.js_type.element_type.type }}') { - throw new Error(`expected index ${i} of "{{ field.name }}" to be "{{ field.js_type.element_type.type }}"`); - } - } -{% else %} - for (const [i, v] of obj['{{ field.name }}'].entries()) { - try { - {{ field.type.type }}.validate(v) - } catch (e) { - throw new Error(`in index ${i} of "{{ field.name }}":\n ` + (e as Error).message); - } - } -{% endif %} -{% endif %} -{% else %} -{% if field.js_type.is_primitive %} - if (typeof obj['{{ field.name }}'] !== '{{ field.js_type.type }}') { - throw new Error('expected "{{ field.name }}" to be "{{ field.js_type.type }}"'); - } -{% else %} - try { - {{ field.type.type }}.validate(obj['{{ field.name }}'] as Record); - } catch (e) { - throw new Error('in "{{ field.name }}":\n ' + (e as Error).message); - } -{% endif %} -{% endif %} -{% endfor %} - } -} - -/* -{{ msg.raw }} -*/