From 5fc6de2a4746b547e079a12ffa40005dfad6997f Mon Sep 17 00:00:00 2001 From: henrrypg Date: Thu, 26 Oct 2023 16:18:50 -0500 Subject: [PATCH 1/4] feat: load default assets from image instead of a larger assets file --- README.rst | 4 +- .../apps/superset/pythonpath/assets.yaml | 5 -- .../apps/superset/pythonpath/create_assets.py | 50 +++++++++++++------ .../aspects/build/aspects-superset/Dockerfile | 2 + 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/README.rst b/README.rst index 663e1ca4f..14102ad90 100644 --- a/README.rst +++ b/README.rst @@ -149,7 +149,7 @@ To contribute assets to Aspects: their actual SQL. If you haven't changed the SQL of these queries (stored in `tutoraspects/templates/openedx-assets/queries` you can just revert that change back to their `include` values such as: - `sql: "{% include 'openedx-assets/queries/fact_enrollments_by_day.sql' %}"` + `sql: "{% include 'aspects/build/aspects-superset/openedx-assets/queries/fact_enrollments_by_day.sql' %}"` #. The script will also warn about missing `_roles` in dashboards. Superset does not export these, so you will need to manually add this key with the roles that are necessary to view the dashboard. See the existing dashboards for how this is done. @@ -172,7 +172,7 @@ To make it easier for developers to manage virtual datasets, there is an extra s .. code-block:: yaml - sql: "{% include 'openedx-assets/queries/query.sql' %}" + sql: "{% include 'aspects/build/aspects-superset/openedx-assets/queries/query.sql' %}" However, please keep in mind that the assets declaration is itself a jinja template. That means that any jinja used in the dataset definition should be escaped. There are examples of how to handle this in the existing queries, such as `dim_courses.sql`_. diff --git a/tutoraspects/templates/aspects/apps/superset/pythonpath/assets.yaml b/tutoraspects/templates/aspects/apps/superset/pythonpath/assets.yaml index 6dcff77a2..f7135667a 100644 --- a/tutoraspects/templates/aspects/apps/superset/pythonpath/assets.yaml +++ b/tutoraspects/templates/aspects/apps/superset/pythonpath/assets.yaml @@ -1,6 +1 @@ -{% for file in "openedx-assets/assets/"|walk_templates %} -- {% filter indent(width=2) %}{% include file %}{% endfilter %} -{% endfor %} - - {{ patch("superset-extra-assets") }} diff --git a/tutoraspects/templates/aspects/apps/superset/pythonpath/create_assets.py b/tutoraspects/templates/aspects/apps/superset/pythonpath/create_assets.py index 91c12c4ee..5a4560cdf 100644 --- a/tutoraspects/templates/aspects/apps/superset/pythonpath/create_assets.py +++ b/tutoraspects/templates/aspects/apps/superset/pythonpath/create_assets.py @@ -36,6 +36,7 @@ TRANSLATIONS_FILE_PATH = "/app/localization/locale.yaml" ASSETS_FILE_PATH = "/app/pythonpath/assets.yaml" +ASSETS_PATH = "/app/openedx-assets" merged_data = {} with open(TRANSLATIONS_FILE_PATH, "r") as file: @@ -61,26 +62,45 @@ def main(): def create_assets(): """Create assets from a yaml file.""" roles = {} + + for root, dirs, files in os.walk(ASSETS_PATH): + for file in files: + if not file.endswith(".yaml"): + continue + + path = os.path.join(root, file) + with open(path, "r") as file: + asset = yaml.safe_load(file) + if not asset: + continue + + # Process the asset directly + if FILE_NAME_ATTRIBUTE in asset: + file_name = asset.pop(FILE_NAME_ATTRIBUTE) + + # Find the right folder to create the asset in + for asset_name, folder in ASSET_FOLDER_MAPPING.items(): + if asset_name in asset: + write_asset_to_file(asset, asset_name, folder, file_name, roles) + break + with open(ASSETS_FILE_PATH, "r") as file: extra_assets = yaml.safe_load(file) - if not extra_assets: - print("No extra assets to create") - return + if extra_assets: + # For each asset, create a file in the right folder + for asset in extra_assets: + if FILE_NAME_ATTRIBUTE not in asset: + raise Exception(f"Asset {asset} has no {FILE_NAME_ATTRIBUTE}") + file_name = asset.pop(FILE_NAME_ATTRIBUTE) - # For each asset, create a file in the right folder - for asset in extra_assets: - if FILE_NAME_ATTRIBUTE not in asset: - raise Exception(f"Asset {asset} has no {FILE_NAME_ATTRIBUTE}") - file_name = asset.pop(FILE_NAME_ATTRIBUTE) - - # Find the right folder to create the asset in - for asset_name, folder in ASSET_FOLDER_MAPPING.items(): - if not asset_name in asset: - continue + # Find the right folder to create the asset in + for asset_name, folder in ASSET_FOLDER_MAPPING.items(): + if not asset_name in asset: + continue - write_asset_to_file(asset, asset_name, folder, file_name, roles) - break + write_asset_to_file(asset, asset_name, folder, file_name, roles) + break import_assets() update_dashboard_roles(roles) diff --git a/tutoraspects/templates/aspects/build/aspects-superset/Dockerfile b/tutoraspects/templates/aspects/build/aspects-superset/Dockerfile index 1d51e4c5a..4e0db7475 100644 --- a/tutoraspects/templates/aspects/build/aspects-superset/Dockerfile +++ b/tutoraspects/templates/aspects/build/aspects-superset/Dockerfile @@ -32,4 +32,6 @@ RUN apt-get update -q \ && ln -s /opt/firefox/firefox /usr/local/bin/firefox \ && apt-get autoremove -yqq --purge wget && rm -rf /var/lib/apt/lists/* /var/[log,tmp]/* /tmp/* && apt-get clean +COPY ./openedx-assets /app/openedx-assets + USER superset From 532c9d583d0af80967b3724ecf6eda06d21c4451 Mon Sep 17 00:00:00 2001 From: henrrypg Date: Fri, 27 Oct 2023 14:54:51 -0500 Subject: [PATCH 2/4] fix: address suggestions --- README.rst | 4 ++-- .../apps/superset/pythonpath/create_assets.py | 17 +++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/README.rst b/README.rst index 14102ad90..663e1ca4f 100644 --- a/README.rst +++ b/README.rst @@ -149,7 +149,7 @@ To contribute assets to Aspects: their actual SQL. If you haven't changed the SQL of these queries (stored in `tutoraspects/templates/openedx-assets/queries` you can just revert that change back to their `include` values such as: - `sql: "{% include 'aspects/build/aspects-superset/openedx-assets/queries/fact_enrollments_by_day.sql' %}"` + `sql: "{% include 'openedx-assets/queries/fact_enrollments_by_day.sql' %}"` #. The script will also warn about missing `_roles` in dashboards. Superset does not export these, so you will need to manually add this key with the roles that are necessary to view the dashboard. See the existing dashboards for how this is done. @@ -172,7 +172,7 @@ To make it easier for developers to manage virtual datasets, there is an extra s .. code-block:: yaml - sql: "{% include 'aspects/build/aspects-superset/openedx-assets/queries/query.sql' %}" + sql: "{% include 'openedx-assets/queries/query.sql' %}" However, please keep in mind that the assets declaration is itself a jinja template. That means that any jinja used in the dataset definition should be escaped. There are examples of how to handle this in the existing queries, such as `dim_courses.sql`_. diff --git a/tutoraspects/templates/aspects/apps/superset/pythonpath/create_assets.py b/tutoraspects/templates/aspects/apps/superset/pythonpath/create_assets.py index 5a4560cdf..eba47b337 100644 --- a/tutoraspects/templates/aspects/apps/superset/pythonpath/create_assets.py +++ b/tutoraspects/templates/aspects/apps/superset/pythonpath/create_assets.py @@ -75,14 +75,15 @@ def create_assets(): continue # Process the asset directly - if FILE_NAME_ATTRIBUTE in asset: - file_name = asset.pop(FILE_NAME_ATTRIBUTE) - - # Find the right folder to create the asset in - for asset_name, folder in ASSET_FOLDER_MAPPING.items(): - if asset_name in asset: - write_asset_to_file(asset, asset_name, folder, file_name, roles) - break + if FILE_NAME_ATTRIBUTE not in asset: + raise Exception(f"Asset {asset} has no {FILE_NAME_ATTRIBUTE}") + file_name = asset.pop(FILE_NAME_ATTRIBUTE) + + # Find the right folder to create the asset in + for asset_name, folder in ASSET_FOLDER_MAPPING.items(): + if asset_name in asset: + write_asset_to_file(asset, asset_name, folder, file_name, roles) + break with open(ASSETS_FILE_PATH, "r") as file: extra_assets = yaml.safe_load(file) From 62939d4db417e2f0b4917be3ca5a855a978e4bc7 Mon Sep 17 00:00:00 2001 From: henrrypg Date: Tue, 31 Oct 2023 15:42:12 -0500 Subject: [PATCH 3/4] docs: add rebuild step to docs --- README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/README.rst b/README.rst index 663e1ca4f..54d049b7c 100644 --- a/README.rst +++ b/README.rst @@ -153,6 +153,7 @@ To contribute assets to Aspects: #. The script will also warn about missing `_roles` in dashboards. Superset does not export these, so you will need to manually add this key with the roles that are necessary to view the dashboard. See the existing dashboards for how this is done. +#. Re-build your ``aspects-superset`` image with `tutor images build aspects-superset --no-cache` #. Run the command `tutor aspects check_superset_assets` to confirm there are no duplicate assets, which can happen when you rename an asset, and will cause import to fail. The command will automatically delete the older file if it finds a duplicate. From 1d017c274a71a55455d80e43c4e4388157fe7fad Mon Sep 17 00:00:00 2001 From: henrrypg Date: Wed, 1 Nov 2023 09:54:05 -0500 Subject: [PATCH 4/4] chore: move openedx-assets to build folder --- .../assets/charts/Active_Users_Per_Organization.yaml | 0 .../openedx-assets/assets/charts/Actor_IDs_over_time.yaml | 0 .../assets/charts/Course_Enrollments_Over_Time.yaml | 0 .../openedx-assets/assets/charts/Course_Grade_Distribution.yaml | 0 .../aspects-superset}/openedx-assets/assets/charts/Courses.yaml | 0 .../openedx-assets/assets/charts/Courses_Per_Organization.yaml | 0 .../assets/charts/Currently_Enrolled_Learners_Per_Day.yaml | 0 .../openedx-assets/assets/charts/Distinct_forum_users.yaml | 0 .../openedx-assets/assets/charts/Distribution_Of_Attempts.yaml | 0 .../assets/charts/Distribution_Of_Hints_Per_Correct_Answer.yaml | 0 .../assets/charts/Distribution_Of_Problem_Grades.yaml | 0 .../openedx-assets/assets/charts/Distribution_Of_Responses.yaml | 0 .../openedx-assets/assets/charts/Enrollment_Events_Per_Day.yaml | 0 .../assets/charts/Enrollments_By_Enrollment_Mode.yaml | 0 .../openedx-assets/assets/charts/Enrollments_By_Type.yaml | 0 .../openedx-assets/assets/charts/Event_type.yaml | 0 .../openedx-assets/assets/charts/Events_per_course.yaml | 0 .../openedx-assets/assets/charts/Last_Received_Event.yaml | 0 .../openedx-assets/assets/charts/Last_course_syncronized.yaml | 0 .../openedx-assets/assets/charts/Most_Active_Courses_Per_Day.yaml | 0 .../openedx-assets/assets/charts/Posts_per_user.yaml | 0 .../openedx-assets/assets/charts/Responses_Per_Problem.yaml | 0 .../openedx-assets/assets/charts/Slowest_ClickHouse_Queries.yaml | 0 .../openedx-assets/assets/charts/Total_Organizations.yaml | 0 .../assets/charts/Transcripts_Captions_Per_Video.yaml | 0 .../openedx-assets/assets/charts/Unique_actors.yaml | 0 .../openedx-assets/assets/charts/Watched_Video_Segments.yaml | 0 .../openedx-assets/assets/charts/Watches_Per_Video.yaml | 0 .../openedx-assets/assets/charts/clickhouse_metrics.yaml | 0 .../openedx-assets/assets/charts/xAPI_Events_Over_Time.yaml | 0 .../openedx-assets/assets/dashboards/Instructor_Dashboard.yaml | 0 .../openedx-assets/assets/dashboards/Operator_Dashboard.yaml | 0 .../openedx-assets/assets/databases/OpenedX_Clickhouse.yaml | 0 .../assets/datasets/clickhouse_computed_metrics.yaml | 0 .../openedx-assets/assets/datasets/course_blocks.yaml | 0 .../openedx-assets/assets/datasets/course_names.yaml | 0 .../openedx-assets/assets/datasets/course_overviews.yaml | 0 .../openedx-assets/assets/datasets/dim_course_problems.yaml | 0 .../openedx-assets/assets/datasets/dim_course_videos.yaml | 0 .../openedx-assets/assets/datasets/fact_course_grades.yaml | 0 .../openedx-assets/assets/datasets/fact_enrollments.yaml | 0 .../openedx-assets/assets/datasets/fact_enrollments_by_day.yaml | 0 .../openedx-assets/assets/datasets/fact_forum_interactions.yaml | 0 .../assets/datasets/fact_learner_problem_course_summary.yaml | 0 .../assets/datasets/fact_learner_problem_summary.yaml | 0 .../openedx-assets/assets/datasets/fact_problem_grades.yaml | 0 .../openedx-assets/assets/datasets/fact_problem_responses.yaml | 0 .../openedx-assets/assets/datasets/fact_transcript_usage.yaml | 0 .../openedx-assets/assets/datasets/fact_video_plays.yaml | 0 .../assets/datasets/fact_watched_video_segments.yaml | 0 .../openedx-assets/assets/datasets/hints_per_success.yaml | 0 .../openedx-assets/assets/datasets/posts_per_user.yaml | 0 .../assets/datasets/slowest_clickhouse_queries.yaml | 0 .../openedx-assets/assets/datasets/xapi_events_all_parsed.yaml | 0 54 files changed, 0 insertions(+), 0 deletions(-) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Active_Users_Per_Organization.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Actor_IDs_over_time.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Course_Enrollments_Over_Time.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Course_Grade_Distribution.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Courses.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Courses_Per_Organization.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Currently_Enrolled_Learners_Per_Day.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Distinct_forum_users.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Distribution_Of_Attempts.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Distribution_Of_Hints_Per_Correct_Answer.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Distribution_Of_Problem_Grades.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Distribution_Of_Responses.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Enrollment_Events_Per_Day.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Enrollments_By_Enrollment_Mode.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Enrollments_By_Type.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Event_type.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Events_per_course.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Last_Received_Event.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Last_course_syncronized.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Most_Active_Courses_Per_Day.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Posts_per_user.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Responses_Per_Problem.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Slowest_ClickHouse_Queries.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Total_Organizations.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Transcripts_Captions_Per_Video.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Unique_actors.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Watched_Video_Segments.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/Watches_Per_Video.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/clickhouse_metrics.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/charts/xAPI_Events_Over_Time.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/dashboards/Instructor_Dashboard.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/dashboards/Operator_Dashboard.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/databases/OpenedX_Clickhouse.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/clickhouse_computed_metrics.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/course_blocks.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/course_names.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/course_overviews.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/dim_course_problems.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/dim_course_videos.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/fact_course_grades.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/fact_enrollments.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/fact_enrollments_by_day.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/fact_forum_interactions.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/fact_learner_problem_course_summary.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/fact_learner_problem_summary.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/fact_problem_grades.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/fact_problem_responses.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/fact_transcript_usage.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/fact_video_plays.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/fact_watched_video_segments.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/hints_per_success.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/posts_per_user.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/slowest_clickhouse_queries.yaml (100%) rename tutoraspects/templates/{ => aspects/build/aspects-superset}/openedx-assets/assets/datasets/xapi_events_all_parsed.yaml (100%) diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Active_Users_Per_Organization.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Active_Users_Per_Organization.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Active_Users_Per_Organization.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Active_Users_Per_Organization.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Actor_IDs_over_time.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Actor_IDs_over_time.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Actor_IDs_over_time.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Actor_IDs_over_time.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Course_Enrollments_Over_Time.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Enrollments_Over_Time.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Course_Enrollments_Over_Time.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Enrollments_Over_Time.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Course_Grade_Distribution.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Grade_Distribution.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Course_Grade_Distribution.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Grade_Distribution.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Courses.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Courses.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Courses.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Courses.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Courses_Per_Organization.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Courses_Per_Organization.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Courses_Per_Organization.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Courses_Per_Organization.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Currently_Enrolled_Learners_Per_Day.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Currently_Enrolled_Learners_Per_Day.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Currently_Enrolled_Learners_Per_Day.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Currently_Enrolled_Learners_Per_Day.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Distinct_forum_users.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Distinct_forum_users.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Distinct_forum_users.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Distinct_forum_users.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Distribution_Of_Attempts.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Distribution_Of_Attempts.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Distribution_Of_Attempts.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Distribution_Of_Attempts.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Distribution_Of_Hints_Per_Correct_Answer.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Distribution_Of_Hints_Per_Correct_Answer.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Distribution_Of_Hints_Per_Correct_Answer.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Distribution_Of_Hints_Per_Correct_Answer.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Distribution_Of_Problem_Grades.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Distribution_Of_Problem_Grades.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Distribution_Of_Problem_Grades.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Distribution_Of_Problem_Grades.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Distribution_Of_Responses.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Distribution_Of_Responses.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Distribution_Of_Responses.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Distribution_Of_Responses.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Enrollment_Events_Per_Day.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Events_Per_Day.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Enrollment_Events_Per_Day.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Events_Per_Day.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Enrollments_By_Enrollment_Mode.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollments_By_Enrollment_Mode.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Enrollments_By_Enrollment_Mode.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollments_By_Enrollment_Mode.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Enrollments_By_Type.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollments_By_Type.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Enrollments_By_Type.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollments_By_Type.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Event_type.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Event_type.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Event_type.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Event_type.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Events_per_course.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Events_per_course.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Events_per_course.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Events_per_course.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Last_Received_Event.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Last_Received_Event.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Last_Received_Event.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Last_Received_Event.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Last_course_syncronized.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Last_course_syncronized.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Last_course_syncronized.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Last_course_syncronized.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Most_Active_Courses_Per_Day.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Most_Active_Courses_Per_Day.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Most_Active_Courses_Per_Day.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Most_Active_Courses_Per_Day.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Posts_per_user.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Posts_per_user.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Posts_per_user.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Posts_per_user.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Responses_Per_Problem.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Responses_Per_Problem.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Responses_Per_Problem.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Responses_Per_Problem.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Slowest_ClickHouse_Queries.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Slowest_ClickHouse_Queries.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Slowest_ClickHouse_Queries.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Slowest_ClickHouse_Queries.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Total_Organizations.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Total_Organizations.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Total_Organizations.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Total_Organizations.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Transcripts_Captions_Per_Video.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Transcripts_Captions_Per_Video.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Transcripts_Captions_Per_Video.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Transcripts_Captions_Per_Video.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Unique_actors.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Unique_actors.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Unique_actors.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Unique_actors.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Watched_Video_Segments.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Watched_Video_Segments.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Watched_Video_Segments.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Watched_Video_Segments.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/Watches_Per_Video.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Watches_Per_Video.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/Watches_Per_Video.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Watches_Per_Video.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/clickhouse_metrics.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/clickhouse_metrics.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/clickhouse_metrics.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/clickhouse_metrics.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/charts/xAPI_Events_Over_Time.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/xAPI_Events_Over_Time.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/charts/xAPI_Events_Over_Time.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/xAPI_Events_Over_Time.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/dashboards/Instructor_Dashboard.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Instructor_Dashboard.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/dashboards/Instructor_Dashboard.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Instructor_Dashboard.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/dashboards/Operator_Dashboard.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Operator_Dashboard.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/dashboards/Operator_Dashboard.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Operator_Dashboard.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/databases/OpenedX_Clickhouse.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/databases/OpenedX_Clickhouse.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/databases/OpenedX_Clickhouse.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/databases/OpenedX_Clickhouse.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/clickhouse_computed_metrics.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/clickhouse_computed_metrics.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/clickhouse_computed_metrics.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/clickhouse_computed_metrics.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/course_blocks.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/course_blocks.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/course_blocks.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/course_blocks.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/course_names.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/course_names.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/course_names.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/course_names.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/course_overviews.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/course_overviews.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/course_overviews.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/course_overviews.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/dim_course_problems.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/dim_course_problems.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/dim_course_problems.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/dim_course_problems.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/dim_course_videos.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/dim_course_videos.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/dim_course_videos.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/dim_course_videos.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/fact_course_grades.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_course_grades.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/fact_course_grades.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_course_grades.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/fact_enrollments.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_enrollments.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/fact_enrollments.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_enrollments.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/fact_enrollments_by_day.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_enrollments_by_day.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/fact_enrollments_by_day.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_enrollments_by_day.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/fact_forum_interactions.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_forum_interactions.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/fact_forum_interactions.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_forum_interactions.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/fact_learner_problem_course_summary.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_learner_problem_course_summary.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/fact_learner_problem_course_summary.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_learner_problem_course_summary.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/fact_learner_problem_summary.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_learner_problem_summary.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/fact_learner_problem_summary.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_learner_problem_summary.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/fact_problem_grades.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_problem_grades.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/fact_problem_grades.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_problem_grades.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/fact_problem_responses.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_problem_responses.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/fact_problem_responses.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_problem_responses.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/fact_transcript_usage.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_transcript_usage.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/fact_transcript_usage.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_transcript_usage.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/fact_video_plays.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_video_plays.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/fact_video_plays.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_video_plays.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/fact_watched_video_segments.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_watched_video_segments.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/fact_watched_video_segments.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/fact_watched_video_segments.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/hints_per_success.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/hints_per_success.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/hints_per_success.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/hints_per_success.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/posts_per_user.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/posts_per_user.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/posts_per_user.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/posts_per_user.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/slowest_clickhouse_queries.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/slowest_clickhouse_queries.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/slowest_clickhouse_queries.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/slowest_clickhouse_queries.yaml diff --git a/tutoraspects/templates/openedx-assets/assets/datasets/xapi_events_all_parsed.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/xapi_events_all_parsed.yaml similarity index 100% rename from tutoraspects/templates/openedx-assets/assets/datasets/xapi_events_all_parsed.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/xapi_events_all_parsed.yaml