Skip to content

Commit de33f17

Browse files
author
Keegan Irby
committed
Combine LT Session Status bar items into a single one
1 parent a48bf33 commit de33f17

File tree

2 files changed

+33
-46
lines changed

2 files changed

+33
-46
lines changed

packages/core/src/awsService/cloudWatchLogs/commands/tailLogGroup.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ async function prepareDocument(session: LiveTailSession): Promise<vscode.TextDoc
7171
await clearDocument(textDocument)
7272
await vscode.window.showTextDocument(textDocument, { preview: false })
7373
await vscode.languages.setTextDocumentLanguage(textDocument, 'log')
74-
session.showStatusBarItems()
74+
session.showStatusBarItem()
7575
return textDocument
7676
}
7777

@@ -164,48 +164,44 @@ function trimOldestLines(
164164
}
165165

166166
function updateStatusBarItemsOnStreamEvent(session: LiveTailSession, event: LiveTailSessionUpdate) {
167-
updateIsSampledStatusBar(session.statusBarItems.isSampled, event)
168-
updateEventRateStatusBar(session.statusBarItems.eventRate, event)
167+
updateIsSampled(session, event)
168+
updateEventRate(session, event)
169169
}
170170

171-
function updateIsSampledStatusBar(isSampledStatusBarItem: vscode.StatusBarItem, event: LiveTailSessionUpdate) {
171+
function updateIsSampled(session: LiveTailSession, event: LiveTailSessionUpdate) {
172172
let isSampled: boolean
173173
//sessionMetadata is expected to always be present on a LiveTail stream update
174174
if (event.sessionMetadata === undefined || event.sessionMetadata.sampled === undefined) {
175175
isSampled = false
176176
} else {
177177
isSampled = event.sessionMetadata.sampled
178178
}
179-
isSampledStatusBarItem.text = `Sampled: ${isSampled ? 'Yes' : 'No'}`
180-
return isSampledStatusBarItem
179+
session.isSampled = isSampled
181180
}
182181

183-
function updateEventRateStatusBar(eventRateStatusBarItem: vscode.StatusBarItem, event: LiveTailSessionUpdate) {
182+
function updateEventRate(session: LiveTailSession, event: LiveTailSessionUpdate) {
184183
let numEvents
185184
if (event.sessionResults === undefined) {
186185
numEvents = 0
187186
} else {
188187
numEvents = event.sessionResults.length
189188
}
190-
eventRateStatusBarItem.text = `${numEvents} events/sec.`
191-
return eventRateStatusBarItem
189+
session.eventRate = numEvents
192190
}
193191

194192
function hideShowStatusBarItemsOnActiveEditor(session: LiveTailSession, document: vscode.TextDocument) {
195193
vscode.window.onDidChangeActiveTextEditor((editor) => {
196194
if (editor?.document === document) {
197-
session.showStatusBarItems()
195+
session.showStatusBarItem()
198196
} else {
199-
session.hideStatusBarItems()
197+
session.hideStatusBarItem()
200198
}
201199
})
202200
}
203201

204202
function startSessionTimer(session: LiveTailSession): NodeJS.Timer {
205203
return globals.clock.setInterval(() => {
206-
const elapsedTime = session.getLiveTailSessionDuration()
207-
const timeString = convertToTimeString(elapsedTime)
208-
session.statusBarItems.sessionTimer.text = `LiveTail Session Timer: ${timeString}`
204+
session.updateStatusBarItemText()
209205
}, 500)
210206
}
211207

packages/core/src/awsService/cloudWatchLogs/registry/liveTailSession.ts

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,10 @@ import {
1010
} from '@aws-sdk/client-cloudwatch-logs'
1111
import { LogStreamFilterResponse } from '../wizard/liveTailLogStreamSubmenu'
1212
import { CloudWatchLogsSettings } from '../cloudWatchLogsUtils'
13-
import { Settings, ToolkitError } from '../../../shared'
13+
import { convertToTimeString, Settings, ToolkitError } from '../../../shared'
1414
import { createLiveTailURIFromArgs } from './liveTailSessionRegistry'
1515
import { getUserAgent } from '../../../shared/telemetry/util'
1616

17-
export type LiveTailSessionStatusBarItems = {
18-
isSampled: vscode.StatusBarItem
19-
eventRate: vscode.StatusBarItem
20-
sessionTimer: vscode.StatusBarItem
21-
}
22-
2317
export type LiveTailSessionConfiguration = {
2418
logGroupName: string
2519
logStreamFilter?: LogStreamFilterResponse
@@ -39,9 +33,11 @@ export class LiveTailSession {
3933
private logEventFilterPattern?: string
4034
private _maxLines: number
4135
private _uri: vscode.Uri
42-
private _statusBarItems: LiveTailSessionStatusBarItems
36+
private statusBarItem: vscode.StatusBarItem
4337
private startTime: number | undefined
4438
private endTime: number | undefined
39+
private _eventRate: number
40+
private _isSampled: boolean
4541

4642
static settings = new CloudWatchLogsSettings(Settings.instance)
4743

@@ -57,7 +53,9 @@ export class LiveTailSession {
5753
}
5854
this._maxLines = LiveTailSession.settings.get('limit', 10000)
5955
this._uri = createLiveTailURIFromArgs(configuration)
60-
this._statusBarItems = this.createStatusBarItems()
56+
this.statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 0)
57+
this._eventRate = 0
58+
this._isSampled = false
6159
}
6260

6361
public get maxLines() {
@@ -72,8 +70,12 @@ export class LiveTailSession {
7270
return this._logGroupName
7371
}
7472

75-
public get statusBarItems(): LiveTailSessionStatusBarItems {
76-
return this._statusBarItems
73+
public set eventRate(rate: number) {
74+
this._eventRate = rate
75+
}
76+
77+
public set isSampled(isSampled: boolean) {
78+
this._isSampled = isSampled
7779
}
7880

7981
public async startLiveTailSession(): Promise<AsyncIterable<StartLiveTailResponseStream>> {
@@ -95,7 +97,7 @@ export class LiveTailSession {
9597

9698
public stopLiveTailSession() {
9799
this.endTime = Date.now()
98-
this.disposeStatusBarItems()
100+
this.statusBarItem.dispose()
99101
this.liveTailClient.abortController.abort()
100102
this.liveTailClient.cwlClient.destroy()
101103
}
@@ -133,29 +135,18 @@ export class LiveTailSession {
133135
})
134136
}
135137

136-
private createStatusBarItems(): LiveTailSessionStatusBarItems {
137-
return {
138-
sessionTimer: vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 0),
139-
eventRate: vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 1),
140-
isSampled: vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 2),
141-
}
142-
}
143-
144-
public showStatusBarItems() {
145-
this.statusBarItems.eventRate.show()
146-
this.statusBarItems.isSampled.show()
147-
this.statusBarItems.sessionTimer.show()
138+
public showStatusBarItem() {
139+
this.statusBarItem.show()
148140
}
149141

150-
public hideStatusBarItems() {
151-
this.statusBarItems.eventRate.hide()
152-
this.statusBarItems.isSampled.hide()
153-
this.statusBarItems.sessionTimer.hide()
142+
public hideStatusBarItem() {
143+
this.statusBarItem.hide()
154144
}
155145

156-
private disposeStatusBarItems() {
157-
this.statusBarItems.eventRate.dispose()
158-
this.statusBarItems.isSampled.dispose()
159-
this.statusBarItems.sessionTimer.dispose()
146+
public updateStatusBarItemText() {
147+
const elapsedTime = this.getLiveTailSessionDuration()
148+
const timeString = convertToTimeString(elapsedTime)
149+
const sampledString = this._isSampled ? 'Yes' : 'No'
150+
this.statusBarItem.text = `Tailing Session: ${timeString}, ${this._eventRate} events/sec, Sampled: ${sampledString}`
160151
}
161152
}

0 commit comments

Comments
 (0)