Skip to content

Commit a83b376

Browse files
Backport telemetry: settings + UI tracking (#6504, #6511) and dialog import refactor (#6567)
Backports the combined changes from the following PRs into `rh-test`: - #6504 — Settings telemetry (track `SETTING_CHANGED` on successful update) - #6511 — UI telemetry (actionbar drag handle, run button choices/multi‑batch submit, breadcrumb item/root selection) Key points - Settings telemetry added via `SettingItem.vue` after successful setting updates and wired to `TelemetryEvents.SETTING_CHANGED`. - UI telemetry wired for run/queue actions and breadcrumbs to match upstream behavior. Divergences from the source PRs - Removed `input_type`, `category`, and `sub_category` from `SettingChangedMetadata` to keep the event shape focused and consistent with downstream consumers. - Replaced lazy telemetry import in `dialogService` error dialog `onClose` handlers with a top‑level `useTelemetry()` import for clarity and to avoid unnecessary dynamic imports. - Kept a few additional telemetry events already present in this branch (error dialog actions, graph/sidebar/template interactions). Happy to trim these for a strict backport if desired. Validation - Ran `pnpm lint:fix && pnpm typecheck` successfully locally. References - Upstream PRs: #6504, #6511 - Branch: `backport-6511-6504-to-rh-test` ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-6567-Backport-telemetry-settings-UI-tracking-6504-6511-and-dialog-import-refactor-2a16d73d365081ce80a0f973c4483653) by [Unito](https://www.unito.io)
1 parent 657eadb commit a83b376

File tree

17 files changed

+157
-10
lines changed

17 files changed

+157
-10
lines changed

src/components/actionbar/ComfyActionbar.vue

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import type { Ref } from 'vue'
3434
import { computed, inject, nextTick, onMounted, ref, watch } from 'vue'
3535
3636
import { useSettingStore } from '@/platform/settings/settingStore'
37+
import { useTelemetry } from '@/platform/telemetry'
3738
import { cn } from '@/utils/tailwindUtil'
3839
3940
import ComfyRunButton from './ComfyRunButton'
@@ -121,6 +122,15 @@ watch(visible, async (newVisible) => {
121122
}
122123
})
123124
125+
/**
126+
* Track run button handle drag start using mousedown on the drag handle.
127+
*/
128+
useEventListener(dragHandleRef, 'mousedown', () => {
129+
useTelemetry()?.trackUiButtonClicked({
130+
button_id: 'actionbar_run_handle_drag_start'
131+
})
132+
})
133+
124134
const lastDragState = ref({
125135
x: x.value,
126136
y: y.value,

src/components/actionbar/ComfyRunButton/ComfyQueueButton.vue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ const queueModeMenuItemLookup = computed(() => {
118118
label: `${t('menu.run')} (${t('menu.onChange')})`,
119119
tooltip: t('menu.onChangeTooltip'),
120120
command: () => {
121+
useTelemetry()?.trackUiButtonClicked({
122+
button_id: 'queue_mode_option_run_on_change_selected'
123+
})
121124
queueMode.value = 'change'
122125
}
123126
}
@@ -128,6 +131,9 @@ const queueModeMenuItemLookup = computed(() => {
128131
label: `${t('menu.run')} (${t('menu.instant')})`,
129132
tooltip: t('menu.instantTooltip'),
130133
command: () => {
134+
useTelemetry()?.trackUiButtonClicked({
135+
button_id: 'queue_mode_option_run_instant_selected'
136+
})
131137
queueMode.value = 'instant'
132138
}
133139
}

src/components/breadcrumb/SubgraphBreadcrumb.vue

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import { computed, onUpdated, ref, watch } from 'vue'
3838
3939
import SubgraphBreadcrumbItem from '@/components/breadcrumb/SubgraphBreadcrumbItem.vue'
4040
import { useOverflowObserver } from '@/composables/element/useOverflowObserver'
41+
import { useTelemetry } from '@/platform/telemetry'
4142
import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore'
4243
import { useCanvasStore } from '@/renderer/core/canvas/canvasStore'
4344
import { useSubgraphNavigationStore } from '@/stores/subgraphNavigationStore'
@@ -73,7 +74,9 @@ const items = computed(() => {
7374
command: () => {
7475
const canvas = useCanvasStore().getCanvas()
7576
if (!canvas.graph) throw new TypeError('Canvas has no graph')
76-
77+
useTelemetry()?.trackUiButtonClicked({
78+
button_id: 'breadcrumb_subgraph_item_selected'
79+
})
7780
canvas.setGraph(subgraph)
7881
},
7982
updateTitle: (title: string) => {
@@ -97,7 +100,9 @@ const home = computed(() => ({
97100
command: () => {
98101
const canvas = useCanvasStore().getCanvas()
99102
if (!canvas.graph) throw new TypeError('Canvas has no graph')
100-
103+
useTelemetry()?.trackUiButtonClicked({
104+
button_id: 'breadcrumb_subgraph_root_selected'
105+
})
101106
canvas.setGraph(canvas.graph.rootGraph)
102107
}
103108
}))

src/components/dialog/content/ErrorDialogContent.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ const repoName = 'ComfyUI'
8888
const reportContent = ref('')
8989
const reportOpen = ref(false)
9090
const showReport = () => {
91+
telemetry?.trackUiButtonClicked({
92+
button_id: 'error_dialog_show_report_clicked'
93+
})
9194
reportOpen.value = true
9295
}
9396
const toast = useToast()

src/components/dialog/content/error/FindIssueButton.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import Button from 'primevue/button'
1212
import { computed } from 'vue'
1313
14+
import { useTelemetry } from '@/platform/telemetry'
15+
1416
const props = defineProps<{
1517
errorMessage: string
1618
repoOwner: string
@@ -20,6 +22,9 @@ const props = defineProps<{
2022
const queryString = computed(() => props.errorMessage + ' is:issue')
2123
2224
const openGitHubIssues = () => {
25+
useTelemetry()?.trackUiButtonClicked({
26+
button_id: 'error_dialog_find_existing_issues_clicked'
27+
})
2328
const query = encodeURIComponent(queryString.value)
2429
const url = `https://github.com/${props.repoOwner}/${props.repoName}/issues?q=${query}`
2530
window.open(url, '_blank')

src/components/graph/GraphCanvasMenu.vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@
108108
:aria-label="linkVisibilityAriaLabel"
109109
data-testid="toggle-link-visibility-button"
110110
:style="stringifiedMinimapStyles.buttonStyles"
111-
@click="() => commandStore.execute('Comfy.Canvas.ToggleLinkVisibility')"
111+
@click="onLinkVisibilityToggleClick"
112112
>
113113
<template #icon>
114114
<i class="icon-[lucide--route-off]" />
@@ -127,6 +127,7 @@ import { useI18n } from 'vue-i18n'
127127
import { useZoomControls } from '@/composables/useZoomControls'
128128
import { LiteGraph } from '@/lib/litegraph/src/litegraph'
129129
import { useSettingStore } from '@/platform/settings/settingStore'
130+
import { useTelemetry } from '@/platform/telemetry'
130131
import { useCanvasStore } from '@/renderer/core/canvas/canvasStore'
131132
import { useCanvasInteractions } from '@/renderer/core/canvas/useCanvasInteractions'
132133
import { useMinimap } from '@/renderer/extensions/minimap/composables/useMinimap'
@@ -263,6 +264,14 @@ onMounted(() => {
263264
canvasStore.initScaleSync()
264265
})
265266
267+
// Track hide/show links button click and execute the command.
268+
const onLinkVisibilityToggleClick = () => {
269+
useTelemetry()?.trackUiButtonClicked({
270+
button_id: 'graph_menu_hide_links_toggle_clicked'
271+
})
272+
void commandStore.execute('Comfy.Canvas.ToggleLinkVisibility')
273+
}
274+
266275
onBeforeUnmount(() => {
267276
canvasStore.cleanupScaleSync()
268277
})

src/components/graph/selectionToolbox/InfoButton.vue

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@
1717
import Button from 'primevue/button'
1818
1919
import { useSelectionState } from '@/composables/graph/useSelectionState'
20+
import { useTelemetry } from '@/platform/telemetry'
2021
21-
const { showNodeHelp: toggleHelp } = useSelectionState()
22+
const { showNodeHelp } = useSelectionState()
23+
const toggleHelp = () => {
24+
useTelemetry()?.trackUiButtonClicked({
25+
button_id: 'selection_toolbox_node_info_opened'
26+
})
27+
showNodeHelp()
28+
}
2229
</script>

src/components/sidebar/SideToolbar.vue

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import ExtensionSlot from '@/components/common/ExtensionSlot.vue'
3838
import SidebarBottomPanelToggleButton from '@/components/sidebar/SidebarBottomPanelToggleButton.vue'
3939
import SidebarShortcutsToggleButton from '@/components/sidebar/SidebarShortcutsToggleButton.vue'
4040
import { useSettingStore } from '@/platform/settings/settingStore'
41+
import { useTelemetry } from '@/platform/telemetry'
4142
import { useCommandStore } from '@/stores/commandStore'
4243
import { useKeybindingStore } from '@/stores/keybindingStore'
4344
import { useUserStore } from '@/stores/userStore'
@@ -67,10 +68,35 @@ const isSmall = computed(
6768
const tabs = computed(() => workspaceStore.getSidebarTabs())
6869
const selectedTab = computed(() => workspaceStore.sidebarTab.activeSidebarTab)
6970
70-
const onTabClick = async (item: SidebarTabExtension) =>
71+
const onTabClick = async (item: SidebarTabExtension) => {
72+
const telemetry = useTelemetry()
73+
74+
const isNodeLibraryTab = item.id === 'node-library'
75+
const isModelLibraryTab = item.id === 'model-library'
76+
const isWorkflowsTab = item.id === 'workflows'
77+
const isAssetsTab = item.id === 'assets'
78+
79+
if (isNodeLibraryTab)
80+
telemetry?.trackUiButtonClicked({
81+
button_id: 'sidebar_tab_node_library_selected'
82+
})
83+
else if (isModelLibraryTab)
84+
telemetry?.trackUiButtonClicked({
85+
button_id: 'sidebar_tab_model_library_selected'
86+
})
87+
else if (isWorkflowsTab)
88+
telemetry?.trackUiButtonClicked({
89+
button_id: 'sidebar_tab_workflows_selected'
90+
})
91+
else if (isAssetsTab)
92+
telemetry?.trackUiButtonClicked({
93+
button_id: 'sidebar_tab_assets_media_selected'
94+
})
95+
7196
await commandStore.commands
7297
.find((cmd) => cmd.id === `Workspace.ToggleSidebarTab.${item.id}`)
7398
?.function?.()
99+
}
74100
75101
const keybindingStore = useKeybindingStore()
76102
const getTabTooltipSuffix = (tab: SidebarTabExtension) => {

src/components/sidebar/SidebarBottomPanelToggleButton.vue

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<SidebarIcon
33
:tooltip="$t('menu.toggleBottomPanel')"
44
:selected="bottomPanelStore.activePanel == 'terminal'"
5-
@click="bottomPanelStore.toggleBottomPanel"
5+
@click="onClick"
66
>
77
<template #icon>
88
<i-ph:terminal-bold />
@@ -11,9 +11,16 @@
1111
</template>
1212

1313
<script setup lang="ts">
14+
import { useTelemetry } from '@/platform/telemetry'
1415
import { useBottomPanelStore } from '@/stores/workspace/bottomPanelStore'
1516
1617
import SidebarIcon from './SidebarIcon.vue'
1718
1819
const bottomPanelStore = useBottomPanelStore()
20+
const onClick = () => {
21+
useTelemetry()?.trackUiButtonClicked({
22+
button_id: 'sidebar_bottom_panel_console_toggled'
23+
})
24+
bottomPanelStore.toggleBottomPanel()
25+
}
1926
</script>

src/components/sidebar/SidebarHelpCenterIcon.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ import { computed, onMounted } from 'vue'
6363
6464
import HelpCenterMenuContent from '@/components/helpcenter/HelpCenterMenuContent.vue'
6565
import { useSettingStore } from '@/platform/settings/settingStore'
66+
import { useTelemetry } from '@/platform/telemetry'
6667
import { useReleaseStore } from '@/platform/updates/common/releaseStore'
6768
import ReleaseNotificationToast from '@/platform/updates/components/ReleaseNotificationToast.vue'
6869
import WhatsNewPopup from '@/platform/updates/components/WhatsNewPopup.vue'
@@ -100,6 +101,9 @@ const sidebarLocation = computed(() =>
100101
const sidebarSize = computed(() => settingStore.get('Comfy.Sidebar.Size'))
101102
102103
const toggleHelpCenter = () => {
104+
useTelemetry()?.trackUiButtonClicked({
105+
button_id: 'sidebar_help_center_toggled'
106+
})
103107
helpCenterStore.toggle()
104108
}
105109

0 commit comments

Comments
 (0)