feat: add custom attributes to moniter export course task (#37314)

This commit is contained in:
Devasia Joseph
2025-09-03 10:43:21 +05:30
committed by GitHub
parent c69f9d7937
commit acbf50a7dd
2 changed files with 15 additions and 0 deletions

View File

@@ -385,7 +385,9 @@ def export_olx(self, user_id, course_key_string, language):
try:
self.status.set_state('Exporting')
set_custom_attribute("exporting_started", str(courselike_key))
tarball = create_export_tarball(courselike_block, courselike_key, {}, self.status)
set_custom_attribute("exporting_completed", str(courselike_key))
artifact = UserTaskArtifact(status=self.status, name='Output')
artifact.file.save(name=os.path.basename(tarball.name), content=File(tarball))
artifact.save()
@@ -412,10 +414,13 @@ def create_export_tarball(course_block, course_key, context, status=None):
if isinstance(course_key, LibraryLocator):
export_library_to_xml(modulestore(), contentstore(), course_key, root_dir, name)
else:
set_custom_attribute("exporting_course_to_xml_started", str(course_key))
export_course_to_xml(modulestore(), contentstore(), course_block.id, root_dir, name)
set_custom_attribute("exporting_course_to_xml_completed", str(course_key))
if status:
status.set_state('Compressing')
set_custom_attribute("compressing_started", str(course_key))
status.increment_completed_steps()
LOGGER.debug('tar file being generated at %s', export_file.name)
with tarfile.open(name=export_file.name, mode='w:gz') as tar_file:
@@ -456,6 +461,7 @@ def create_export_tarball(course_block, course_key, context, status=None):
if os.path.exists(root_dir / name):
shutil.rmtree(root_dir / name)
set_custom_attribute("compressing_completed", str(course_key))
return export_file

View File

@@ -9,6 +9,7 @@ from abc import abstractmethod
from json import dumps
import lxml.etree
from edx_django_utils.monitoring import set_custom_attribute
from fs.osfs import OSFS
from opaque_keys.edx.locator import CourseLocator, LibraryLocator
from xblock.fields import Reference, ReferenceList, ReferenceValueDict, Scope
@@ -207,6 +208,7 @@ class CourseExportManager(ExportManager):
def process_extra(self, root, courselike, root_courselike_dir, xml_centric_courselike_key, export_fs):
# Export the modulestore's asset metadata.
set_custom_attribute("export_asset_started", str(courselike))
asset_dir = root_courselike_dir + '/' + AssetMetadata.EXPORTED_ASSET_DIR + '/'
if not os.path.isdir(asset_dir):
os.makedirs(asset_dir)
@@ -220,6 +222,7 @@ class CourseExportManager(ExportManager):
lxml.etree.ElementTree(asset_root).write(asset_xml_file, encoding='utf-8')
# export the static assets
set_custom_attribute("export_static_assets_started", str(courselike))
policies_dir = export_fs.makedir('policies', recreate=True)
if self.contentstore:
self.contentstore.export_all_for_course(
@@ -248,24 +251,28 @@ class CourseExportManager(ExportManager):
course_image_file.write(course_image.data)
# export the static tabs
set_custom_attribute("export_tabs_started", str(courselike))
export_extra_content(
export_fs, self.modulestore, self.courselike_key, xml_centric_courselike_key,
'static_tab', 'tabs', '.html'
)
# export the custom tags
set_custom_attribute("export_custom_tags_started", str(courselike))
export_extra_content(
export_fs, self.modulestore, self.courselike_key, xml_centric_courselike_key,
'custom_tag_template', 'custom_tags'
)
# export the course updates
set_custom_attribute("export_course_updates_started", str(courselike))
export_extra_content(
export_fs, self.modulestore, self.courselike_key, xml_centric_courselike_key,
'course_info', 'info', '.html'
)
# export the 'about' data (e.g. overview, etc.)
set_custom_attribute("export_about_started", str(courselike))
export_extra_content(
export_fs, self.modulestore, self.courselike_key, xml_centric_courselike_key,
'about', 'about', '.html'
@@ -280,10 +287,12 @@ class CourseExportManager(ExportManager):
sort_keys=True, indent=4).encode('utf-8'))
# export all of the course metadata in policy.json
set_custom_attribute("export_policy_started", str(courselike))
with course_run_policy_dir.open('policy.json', 'wb') as course_policy:
policy = {'course/' + courselike.location.run: own_metadata(courselike)}
course_policy.write(dumps(policy, cls=EdxJSONEncoder, sort_keys=True, indent=4).encode('utf-8'))
set_custom_attribute("export_drafts_started", str(courselike))
_export_drafts(self.modulestore, self.courselike_key, export_fs, xml_centric_courselike_key)
courselike_key_str = str(self.courselike_key)