From 697f2e93d312544815cdcd4168849a6754cac34c Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Jun 2016 19:57:20 +0300 Subject: [PATCH] EDU-277 Implement separate feature usage statistics for PyCharm Educational Edition --- .../actions/CCCreateCourseArchive.java | 2 ++ .../coursecreator/actions/CCPushCourse.java | 2 ++ .../learning/actions/StudyShowHintAction.java | 2 ++ .../actions/StudyTaskNavigationAction.java | 13 ++++++------ .../statistics/EduUsagesCollector.java | 20 +++++++++++++++++++ .../edu/learning/PyStudyCheckAction.java | 2 ++ 6 files changed, 35 insertions(+), 6 deletions(-) diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateCourseArchive.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateCourseArchive.java index 50e2336444f5..013ccf4682ba 100644 --- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateCourseArchive.java +++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateCourseArchive.java @@ -27,6 +27,7 @@ import com.jetbrains.edu.learning.StudyTaskManager; import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.core.EduUtils; import com.jetbrains.edu.learning.courseFormat.*; +import com.jetbrains.edu.learning.statistics.EduUsagesCollector; import org.jetbrains.annotations.NotNull; import java.io.*; @@ -71,6 +72,7 @@ public class CCCreateCourseArchive extends DumbAwareAction { return; } createCourseArchive(project, module, myZipName, myLocationDir, true); + EduUsagesCollector.createdCourseArchive(); } public static void createCourseArchive(final Project project, Module module, String zipName, String locationDir, boolean showMessage) { diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCPushCourse.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCPushCourse.java index f1a1f3006bf6..2a24bb066e3d 100644 --- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCPushCourse.java +++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCPushCourse.java @@ -10,6 +10,7 @@ import com.intellij.openapi.project.Project; import com.jetbrains.edu.coursecreator.CCUtils; import com.jetbrains.edu.learning.StudyTaskManager; import com.jetbrains.edu.learning.courseFormat.Course; +import com.jetbrains.edu.learning.statistics.EduUsagesCollector; import com.jetbrains.edu.learning.stepic.EduStepicConnector; import org.jetbrains.annotations.NotNull; @@ -37,6 +38,7 @@ public class CCPushCourse extends DumbAwareAction { return; } EduStepicConnector.postCourseWithProgress(project, course); + EduUsagesCollector.courseUploaded(); } } \ No newline at end of file diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyShowHintAction.java b/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyShowHintAction.java index ab390c5b0405..35b3a70bd532 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyShowHintAction.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyShowHintAction.java @@ -18,6 +18,7 @@ import com.jetbrains.edu.learning.StudyTaskManager; import com.jetbrains.edu.learning.StudyUtils; import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholder; import com.jetbrains.edu.learning.courseFormat.Course; +import com.jetbrains.edu.learning.statistics.EduUsagesCollector; import icons.InteractiveLearningIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -59,6 +60,7 @@ public class StudyShowHintAction extends StudyActionWithShortcut { if (file == null) { return; } + EduUsagesCollector.hintShown(); String hintText = ourWarningMessage; if (answerPlaceholder != null) { String hint = answerPlaceholder.getHint(); diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyTaskNavigationAction.java b/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyTaskNavigationAction.java index 614d78671fab..9e85361f40a1 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyTaskNavigationAction.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/actions/StudyTaskNavigationAction.java @@ -15,6 +15,7 @@ import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.courseFormat.Task; import com.jetbrains.edu.learning.courseFormat.TaskFile; import com.jetbrains.edu.learning.editor.StudyEditor; +import com.jetbrains.edu.learning.statistics.EduUsagesCollector; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -36,16 +37,16 @@ abstract public class StudyTaskNavigationAction extends StudyActionWithShortcut if (!studyState.isValid()) { return; } - Task nextTask = getTargetTask(studyState.getTask()); - if (nextTask == null) { + Task targetTask = getTargetTask(studyState.getTask()); + if (targetTask == null) { return; } for (VirtualFile file : FileEditorManager.getInstance(project).getOpenFiles()) { FileEditorManager.getInstance(project).closeFile(file); } - int nextTaskIndex = nextTask.getIndex(); - int lessonIndex = nextTask.getLesson().getIndex(); - Map nextTaskFiles = nextTask.getTaskFiles(); + int nextTaskIndex = targetTask.getIndex(); + int lessonIndex = targetTask.getLesson().getIndex(); + Map nextTaskFiles = targetTask.getTaskFiles(); VirtualFile projectDir = project.getBaseDir(); String lessonDirName = EduNames.LESSON + String.valueOf(lessonIndex); if (projectDir == null) { @@ -64,7 +65,7 @@ abstract public class StudyTaskNavigationAction extends StudyActionWithShortcut ProjectView.getInstance(project).select(taskDir, taskDir, false); return; } - + EduUsagesCollector.taskNavigation(); VirtualFile shouldBeActive = getFileToActivate(project, nextTaskFiles, taskDir); updateProjectView(project, shouldBeActive); diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/statistics/EduUsagesCollector.java b/python/educational-core/student/src/com/jetbrains/edu/learning/statistics/EduUsagesCollector.java index bfba877a54cc..f500a1ee179e 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/statistics/EduUsagesCollector.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/statistics/EduUsagesCollector.java @@ -46,6 +46,26 @@ public class EduUsagesCollector extends UsagesCollector { ServiceManager.getService(EduUsagesCollector.class).myUsageDescriptors.get("project.opened." + projectTypeId).advance(); } + public static void taskChecked() { + ServiceManager.getService(EduUsagesCollector.class).myUsageDescriptors.get("checkTask.").advance(); + } + + public static void hintShown() { + ServiceManager.getService(EduUsagesCollector.class).myUsageDescriptors.get("showHint.").advance(); + } + + public static void taskNavigation() { + ServiceManager.getService(EduUsagesCollector.class).myUsageDescriptors.get("navigateToTask.").advance(); + } + + public static void courseUploaded() { + ServiceManager.getService(EduUsagesCollector.class).myUsageDescriptors.get("uploadCourse.").advance(); + } + + public static void createdCourseArchive() { + ServiceManager.getService(EduUsagesCollector.class).myUsageDescriptors.get("courseArchive.").advance(); + } + @NotNull @Override public Set getUsages() throws CollectUsagesException { diff --git a/python/educational-python/student-python/src/com/jetbrains/edu/learning/PyStudyCheckAction.java b/python/educational-python/student-python/src/com/jetbrains/edu/learning/PyStudyCheckAction.java index b3252a761426..9bea1b5a731a 100644 --- a/python/educational-python/student-python/src/com/jetbrains/edu/learning/PyStudyCheckAction.java +++ b/python/educational-python/student-python/src/com/jetbrains/edu/learning/PyStudyCheckAction.java @@ -21,6 +21,7 @@ import com.jetbrains.edu.learning.courseFormat.StudyStatus; import com.jetbrains.edu.learning.courseFormat.Task; import com.jetbrains.edu.learning.courseFormat.TaskFile; import com.jetbrains.edu.learning.editor.StudyEditor; +import com.jetbrains.edu.learning.statistics.EduUsagesCollector; import com.jetbrains.edu.learning.ui.StudyToolWindow; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -32,6 +33,7 @@ public class PyStudyCheckAction extends StudyCheckAction { public static final String ACTION_ID = "PyCheckAction"; public void check(@NotNull Project project) { + EduUsagesCollector.taskChecked(); ApplicationManager.getApplication().runWriteAction(() -> CommandProcessor.getInstance().runUndoTransparentAction(() -> { final StudyEditor selectedEditor = StudyUtils.getSelectedStudyEditor(project); if (selectedEditor == null) return;