Set<MetricEvent> (@NotNull Project project) { Object2IntMap<Template> templates = new Object2IntOpenHashMap<>(); if (project.isDisposed()) { return Collections.emptySet(); } RunManager runManager = RunManager.getInstance(project); for (RunnerAndConfigurationSettings settings : runManager.getAllSettings()) { ProgressManager.checkCanceled(); RunConfiguration runConfiguration = settings.getConfiguration(); final ConfigurationFactory configurationFactory = runConfiguration.getFactory(); if (configurationFactory == null) { // not realistic continue; } final ConfigurationType configurationType = configurationFactory.getType(); List<EventPair<?>> pairs = createFeatureUsageData(configurationType, configurationFactory); pairs.addAll(getSettings(settings, runConfiguration)); final Template template = new Template(CONFIGURED_IN_PROJECT_EVENT, pairs); addOrIncrement(templates, template); collectRunConfigurationFeatures(runConfiguration, templates); if (runConfiguration instanceof FusAwareRunConfiguration) { List<EventPair<?>> additionalData = ((FusAwareRunConfiguration)runConfiguration).getAdditionalUsageData(); pairs.add(ADDITIONAL_FIELD.with(new ObjectEventData(additionalData))); } if (runConfiguration instanceof TargetEnvironmentAwareRunProfile) { String assignedTargetType = getAssignedTargetType(project, (TargetEnvironmentAwareRunProfile)runConfiguration); if (assignedTargetType != null) { pairs.add(TARGET_FIELD.with(assignedTargetType)); } } if (runConfiguration instanceof EnvFilesOptions envFilesOptions) { pairs.add(ENV_FILES_COUNT.with(envFilesOptions.getEnvFilePaths().size())); } } Set<MetricEvent> metrics = new HashSet<>(); for (Object2IntMap.Entry<Template> entry : Object2IntMaps.fastIterable(templates)) { metrics.add(entry.getKey().createMetricEvent(entry.getIntValue())); } final int limitingBoundary = 500; // avoid reporting extreme values metrics.add(TOTAL_COUNT.metric(Math.min(runManager.getAllSettings().size(), limitingBoundary), runManager.getTempConfigurationsList().size())); return metrics; }