Skip to content

Commit 8cc079f

Browse files
authored
Fix the view logs command (#392)
1 parent 0e7dc57 commit 8cc079f

File tree

2 files changed

+21
-17
lines changed

2 files changed

+21
-17
lines changed

src/commands.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,10 @@ export class Commands {
276276
*/
277277
public async viewLogs(): Promise<void> {
278278
if (!this.workspaceLogPath) {
279-
vscode.window.showInformationMessage("No logs available.", this.workspaceLogPath || "<unset>")
279+
vscode.window.showInformationMessage(
280+
"No logs available. Make sure to set coder.proxyLogDirectory to get logs.",
281+
this.workspaceLogPath || "<unset>",
282+
)
280283
return
281284
}
282285
const uri = vscode.Uri.file(this.workspaceLogPath)

src/remote.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -430,14 +430,16 @@ export class Remote {
430430
return
431431
}
432432

433+
const logDir = this.getLogDir(featureSet)
434+
433435
// This ensures the Remote SSH extension resolves the host to execute the
434436
// Coder binary properly.
435437
//
436438
// If we didn't write to the SSH config file, connecting would fail with
437439
// "Host not found".
438440
try {
439441
this.storage.writeToCoderOutputChannel("Updating SSH config...")
440-
await this.updateSSHConfig(workspaceRestClient, parts.label, parts.host, binaryPath, featureSet)
442+
await this.updateSSHConfig(workspaceRestClient, parts.label, parts.host, binaryPath, logDir)
441443
} catch (error) {
442444
this.storage.writeToCoderOutputChannel(`Failed to configure SSH: ${error}`)
443445
throw error
@@ -450,7 +452,7 @@ export class Remote {
450452
return
451453
}
452454
disposables.push(this.showNetworkUpdates(pid))
453-
this.commands.workspaceLogPath = path.join(this.storage.getLogPath(), `${pid}.log`)
455+
this.commands.workspaceLogPath = logDir ? path.join(logDir, `${pid}.log`) : undefined
454456
})
455457

456458
// Register the label formatter again because SSH overrides it!
@@ -476,34 +478,33 @@ export class Remote {
476478
}
477479

478480
/**
479-
* Format's the --log-dir argument for the ProxyCommand
481+
* Return the --log-dir argument value for the ProxyCommand. It may be an
482+
* empty string if the setting is not set or the cli does not support it.
480483
*/
481-
private async formatLogArg(featureSet: FeatureSet): Promise<string> {
484+
private getLogDir(featureSet: FeatureSet): string {
482485
if (!featureSet.proxyLogDirectory) {
483486
return ""
484487
}
485-
486488
// If the proxyLogDirectory is not set in the extension settings we don't send one.
487-
// Question for Asher: How do VSCode extension settings behave in terms of semver for the extension?
488-
const logDir = expandPath(String(vscode.workspace.getConfiguration().get("coder.proxyLogDirectory") ?? "").trim())
489+
return expandPath(String(vscode.workspace.getConfiguration().get("coder.proxyLogDirectory") ?? "").trim())
490+
}
491+
492+
/**
493+
* Formats the --log-dir argument for the ProxyCommand after making sure it
494+
* has been created.
495+
*/
496+
private async formatLogArg(logDir: string): Promise<string> {
489497
if (!logDir) {
490498
return ""
491499
}
492-
493500
await fs.mkdir(logDir, { recursive: true })
494501
this.storage.writeToCoderOutputChannel(`SSH proxy diagnostics are being written to ${logDir}`)
495502
return ` --log-dir ${escape(logDir)}`
496503
}
497504

498505
// updateSSHConfig updates the SSH configuration with a wildcard that handles
499506
// all Coder entries.
500-
private async updateSSHConfig(
501-
restClient: Api,
502-
label: string,
503-
hostName: string,
504-
binaryPath: string,
505-
featureSet: FeatureSet,
506-
) {
507+
private async updateSSHConfig(restClient: Api, label: string, hostName: string, binaryPath: string, logDir: string) {
507508
let deploymentSSHConfig = {}
508509
try {
509510
const deploymentConfig = await restClient.getDeploymentSSHConfig()
@@ -585,7 +586,7 @@ export class Remote {
585586
Host: label ? `${AuthorityPrefix}.${label}--*` : `${AuthorityPrefix}--*`,
586587
ProxyCommand: `${escape(binaryPath)}${headerArg} vscodessh --network-info-dir ${escape(
587588
this.storage.getNetworkInfoPath(),
588-
)}${await this.formatLogArg(featureSet)} --session-token-file ${escape(this.storage.getSessionTokenPath(label))} --url-file ${escape(
589+
)}${await this.formatLogArg(logDir)} --session-token-file ${escape(this.storage.getSessionTokenPath(label))} --url-file ${escape(
589590
this.storage.getUrlPath(label),
590591
)} %h`,
591592
ConnectTimeout: "0",

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy