From 7ea5870a11adf8f27fb350bc11746f9bdb6e1736 Mon Sep 17 00:00:00 2001 From: Andrew Pareles Date: Sat, 15 Mar 2025 03:38:36 -0700 Subject: [PATCH] alive ping --- .../void/browser/metricsPollService.ts | 56 ++++++++++++++ .../void/browser/quickEditStateService.ts | 77 ------------------- .../src/quick-edit-tsx/QuickEditChat.tsx | 4 +- .../void/browser/react/src/util/services.tsx | 27 +------ .../contrib/void/browser/void.contribution.ts | 3 + .../contrib/void/browser/voidUpdateActions.ts | 2 +- 6 files changed, 63 insertions(+), 106 deletions(-) create mode 100644 src/vs/workbench/contrib/void/browser/metricsPollService.ts delete mode 100644 src/vs/workbench/contrib/void/browser/quickEditStateService.ts diff --git a/src/vs/workbench/contrib/void/browser/metricsPollService.ts b/src/vs/workbench/contrib/void/browser/metricsPollService.ts new file mode 100644 index 00000000..92bbd16c --- /dev/null +++ b/src/vs/workbench/contrib/void/browser/metricsPollService.ts @@ -0,0 +1,56 @@ +/*-------------------------------------------------------------------------------------- + * Copyright 2025 Glass Devtools, Inc. All rights reserved. + * Licensed under the Apache License, Version 2.0. See LICENSE.txt for more information. + *--------------------------------------------------------------------------------------*/ + +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js'; +import { registerWorkbenchContribution2, WorkbenchPhase } from '../../../common/contributions.js'; + +import * as dom from '../../../../base/browser/dom.js'; +import { IMetricsService } from '../common/metricsService.js'; + + +export interface IMetricsPollService { + readonly _serviceBrand: undefined; +} + + +const PING_EVERY_MS = 15 * 1000 * 60 // 15 minutes + +export const IMetricsPollService = createDecorator('voidMetricsPollService'); +class MetricsPollService extends Disposable implements IMetricsPollService { + _serviceBrand: undefined; + + static readonly ID = 'voidMetricsPollService'; + + + private readonly intervalID: number + constructor( + @IMetricsService private readonly metricsService: IMetricsService, + ) { + super() + + // initial state + const { window } = dom.getActiveWindow() + let i = 1 + + this.intervalID = window.setInterval(() => { + this.metricsService.capture('Alive', { i }) + i += 1 + console.log('ping', i) + }, PING_EVERY_MS) + + + } + + override dispose() { + super.dispose() + const { window } = dom.getActiveWindow() + window.clearInterval(this.intervalID) + } + + +} + +registerWorkbenchContribution2(MetricsPollService.ID, MetricsPollService, WorkbenchPhase.BlockRestore); diff --git a/src/vs/workbench/contrib/void/browser/quickEditStateService.ts b/src/vs/workbench/contrib/void/browser/quickEditStateService.ts deleted file mode 100644 index 62f3823b..00000000 --- a/src/vs/workbench/contrib/void/browser/quickEditStateService.ts +++ /dev/null @@ -1,77 +0,0 @@ -/*-------------------------------------------------------------------------------------- - * Copyright 2025 Glass Devtools, Inc. All rights reserved. - * Licensed under the Apache License, Version 2.0. See LICENSE.txt for more information. - *--------------------------------------------------------------------------------------*/ - -import { Emitter, Event } from '../../../../base/common/event.js'; -import { Disposable } from '../../../../base/common/lifecycle.js'; -import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; -import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js'; -import { QuickEdit } from './quickEditActions.js'; - - - -// service that manages state -export type VoidQuickEditState = { - quickEditsOfDocument: { [uri: string]: QuickEdit } -} - -export interface IQuickEditStateService { - readonly _serviceBrand: undefined; - - readonly state: VoidQuickEditState; // readonly to the user - setState(newState: Partial): void; - onDidChangeState: Event; - - onDidFocusChat: Event; - onDidBlurChat: Event; - fireFocusChat(): void; - fireBlurChat(): void; - -} - -export const IQuickEditStateService = createDecorator('voidQuickEditStateService'); -class VoidQuickEditStateService extends Disposable implements IQuickEditStateService { - _serviceBrand: undefined; - - static readonly ID = 'voidQuickEditStateService'; - - private readonly _onDidChangeState = new Emitter(); - readonly onDidChangeState: Event = this._onDidChangeState.event; - - private readonly _onFocusChat = new Emitter(); - readonly onDidFocusChat: Event = this._onFocusChat.event; - - private readonly _onBlurChat = new Emitter(); - readonly onDidBlurChat: Event = this._onBlurChat.event; - - - // state - state: VoidQuickEditState - - constructor( - ) { - super() - - // initial state - this.state = { quickEditsOfDocument: {} } - } - - - setState(newState: Partial) { - - this.state = { ...this.state, ...newState } - this._onDidChangeState.fire() - } - - fireFocusChat() { - this._onFocusChat.fire() - } - - fireBlurChat() { - this._onBlurChat.fire() - } - -} - -registerSingleton(IQuickEditStateService, VoidQuickEditStateService, InstantiationType.Eager); diff --git a/src/vs/workbench/contrib/void/browser/react/src/quick-edit-tsx/QuickEditChat.tsx b/src/vs/workbench/contrib/void/browser/react/src/quick-edit-tsx/QuickEditChat.tsx index 01a56226..de52d120 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/quick-edit-tsx/QuickEditChat.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/quick-edit-tsx/QuickEditChat.tsx @@ -3,8 +3,8 @@ * Licensed under the Apache License, Version 2.0. See LICENSE.txt for more information. *--------------------------------------------------------------------------------------*/ -import React, { FormEvent, useCallback, useEffect, useRef, useState } from 'react'; -import { useSettingsState, useSidebarState, useChatThreadsState, useQuickEditState, useAccessor, useCtrlKZoneStreamingState } from '../util/services.js'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { useSettingsState, useAccessor, useCtrlKZoneStreamingState } from '../util/services.js'; import { TextAreaFns, VoidInputBox2 } from '../util/inputs.js'; import { QuickEditPropsType } from '../../../quickEditActions.js'; import { ButtonStop, ButtonSubmit, IconX, VoidChatArea } from '../sidebar-tsx/SidebarChat.js'; diff --git a/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx b/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx index 5e9f4d4a..7ae0ac4e 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx @@ -10,7 +10,6 @@ import { VoidSidebarState } from '../../../sidebarStateService.js' import { VoidSettingsState } from '../../../../../../../workbench/contrib/void/common/voidSettingsService.js' import { ColorScheme } from '../../../../../../../platform/theme/common/theme.js' import { VoidUriState } from '../../../voidUriStateService.js'; -import { VoidQuickEditState } from '../../../quickEditStateService.js' import { RefreshModelStateOfProvider } from '../../../../../../../workbench/contrib/void/common/refreshModelService.js' import { ServicesAccessor } from '../../../../../../../editor/browser/editorExtensions.js'; @@ -27,7 +26,6 @@ import { IVoidSettingsService } from '../../../../../../../workbench/contrib/voi import { IEditCodeService, URIStreamState } from '../../../editCodeServiceInterface.js' import { IVoidUriStateService } from '../../../voidUriStateService.js'; -import { IQuickEditStateService } from '../../../quickEditStateService.js'; import { ISidebarStateService } from '../../../sidebarStateService.js'; import { IInstantiationService } from '../../../../../../../platform/instantiation/common/instantiation.js' import { ICodeEditorService } from '../../../../../../../editor/browser/services/codeEditorService.js' @@ -57,9 +55,6 @@ import { ILanguageService } from '../../../../../../../editor/common/languages/l let uriState: VoidUriState const uriStateListeners: Set<(s: VoidUriState) => void> = new Set() -let quickEditState: VoidQuickEditState -const quickEditStateListeners: Set<(s: VoidQuickEditState) => void> = new Set() - let sidebarState: VoidSidebarState const sidebarStateListeners: Set<(s: VoidSidebarState) => void> = new Set() @@ -94,7 +89,6 @@ export const _registerServices = (accessor: ServicesAccessor) => { const stateServices = { uriStateService: accessor.get(IVoidUriStateService), - quickEditStateService: accessor.get(IQuickEditStateService), sidebarStateService: accessor.get(ISidebarStateService), chatThreadsStateService: accessor.get(IChatThreadService), settingsStateService: accessor.get(IVoidSettingsService), @@ -103,7 +97,7 @@ export const _registerServices = (accessor: ServicesAccessor) => { editCodeService: accessor.get(IEditCodeService), } - const { uriStateService, sidebarStateService, quickEditStateService, settingsStateService, chatThreadsStateService, refreshModelService, themeService, editCodeService } = stateServices + const { uriStateService, sidebarStateService, settingsStateService, chatThreadsStateService, refreshModelService, themeService, editCodeService } = stateServices uriState = uriStateService.state disposables.push( @@ -113,14 +107,6 @@ export const _registerServices = (accessor: ServicesAccessor) => { }) ) - quickEditState = quickEditStateService.state - disposables.push( - quickEditStateService.onDidChangeState(() => { - quickEditState = quickEditStateService.state - quickEditStateListeners.forEach(l => l(quickEditState)) - }) - ) - sidebarState = sidebarStateService.state disposables.push( sidebarStateService.onDidChangeState(() => { @@ -206,7 +192,6 @@ const getReactAccessor = (accessor: ServicesAccessor) => { IVoidSettingsService: accessor.get(IVoidSettingsService), IEditCodeService: accessor.get(IEditCodeService), IVoidUriStateService: accessor.get(IVoidUriStateService), - IQuickEditStateService: accessor.get(IQuickEditStateService), ISidebarStateService: accessor.get(ISidebarStateService), IChatThreadService: accessor.get(IChatThreadService), @@ -265,16 +250,6 @@ export const useUriState = () => { return s } -export const useQuickEditState = () => { - const [s, ss] = useState(quickEditState) - useEffect(() => { - ss(quickEditState) - quickEditStateListeners.add(ss) - return () => { quickEditStateListeners.delete(ss) } - }, [ss]) - return s -} - export const useSidebarState = () => { const [s, ss] = useState(sidebarState) useEffect(() => { diff --git a/src/vs/workbench/contrib/void/browser/void.contribution.ts b/src/vs/workbench/contrib/void/browser/void.contribution.ts index 559c15dc..c69e56af 100644 --- a/src/vs/workbench/contrib/void/browser/void.contribution.ts +++ b/src/vs/workbench/contrib/void/browser/void.contribution.ts @@ -40,6 +40,9 @@ import './terminalToolService.js' // register Thread History import './chatThreadService.js' +// ping +import './metricsPollService.js' + // ---------- common (unclear if these actually need to be imported, because they're already imported wherever they're used) ---------- diff --git a/src/vs/workbench/contrib/void/browser/voidUpdateActions.ts b/src/vs/workbench/contrib/void/browser/voidUpdateActions.ts index d3e92f03..4296c358 100644 --- a/src/vs/workbench/contrib/void/browser/voidUpdateActions.ts +++ b/src/vs/workbench/contrib/void/browser/voidUpdateActions.ts @@ -87,7 +87,7 @@ class VoidUpdateWorkbenchContribution extends Disposable implements IWorkbenchCo // check every 3 hours const { window } = dom.getActiveWindow() - const intervalId = window.setInterval(() => autoCheck(), 3 * 60 * 60 * 1000) + const intervalId = window.setInterval(() => autoCheck(), 3 * 60 * 60 * 1000) // every 3 hrs this._register({ dispose: () => window.clearInterval(intervalId) }) }