mirror of
https://github.com/coder/coder.git
synced 2026-10-24 01:26:25 +08:00
fix: Use WebSockets to stream workspace build logs (#2569)
* fix: Use WebSockets to stream workspace build logs This was using a streaming HTTP request before, which didn't work on my version of Chrome. This method seemed less reliable and standard than a WebSocket, so figured switching would be best. * Update site/src/xServices/workspaceBuild/workspaceBuildXService.ts Co-authored-by: Abhineet Jain <AbhineetJain@users.noreply.github.com> * Update site/src/pages/WorkspaceBuildPage/WorkspaceBuildPage.test.tsx Co-authored-by: Abhineet Jain <AbhineetJain@users.noreply.github.com> * Update site/src/api/api.ts Co-authored-by: Abhineet Jain <AbhineetJain@users.noreply.github.com> * Remove unused prop Co-authored-by: Abhineet Jain <AbhineetJain@users.noreply.github.com>
This commit is contained in:
co-authored by
Abhineet Jain
parent
dc7d6def8e
commit
1778db23cb
+4
-17
@@ -1,5 +1,4 @@
|
||||
import axios, { AxiosRequestHeaders } from "axios"
|
||||
import ndjsonStream from "can-ndjson-stream"
|
||||
import * as Types from "./types"
|
||||
import { WorkspaceBuildTransition } from "./types"
|
||||
import * as TypesGen from "./typesGenerated"
|
||||
@@ -280,25 +279,13 @@ export const getWorkspaceBuildByNumber = async (
|
||||
return response.data
|
||||
}
|
||||
|
||||
export const getWorkspaceBuildLogs = async (buildname: string): Promise<TypesGen.ProvisionerJobLog[]> => {
|
||||
const response = await axios.get<TypesGen.ProvisionerJobLog[]>(`/api/v2/workspacebuilds/${buildname}/logs`)
|
||||
export const getWorkspaceBuildLogs = async (buildname: string, before: Date): Promise<TypesGen.ProvisionerJobLog[]> => {
|
||||
const response = await axios.get<TypesGen.ProvisionerJobLog[]>(
|
||||
`/api/v2/workspacebuilds/${buildname}/logs?before=${before.getTime()}`,
|
||||
)
|
||||
return response.data
|
||||
}
|
||||
|
||||
export const streamWorkspaceBuildLogs = async (
|
||||
buildname: string,
|
||||
): Promise<ReadableStreamDefaultReader<TypesGen.ProvisionerJobLog>> => {
|
||||
// Axios does not support HTTP stream in the browser
|
||||
// https://github.com/axios/axios/issues/1474
|
||||
// So we are going to use window.fetch and return a "stream" reader
|
||||
const reader = await window
|
||||
.fetch(`/api/v2/workspacebuilds/${buildname}/logs?follow=true`)
|
||||
.then((res) => ndjsonStream<TypesGen.ProvisionerJobLog>(res.body))
|
||||
.then((stream) => stream.getReader())
|
||||
|
||||
return reader
|
||||
}
|
||||
|
||||
export const putWorkspaceExtension = async (
|
||||
workspaceId: string,
|
||||
extendWorkspaceRequest: TypesGen.PutExtendWorkspaceRequest,
|
||||
|
||||
@@ -201,7 +201,7 @@ export interface ParameterSchema {
|
||||
readonly validation_contains?: string[]
|
||||
}
|
||||
|
||||
// From codersdk/provisionerdaemons.go:33:6
|
||||
// From codersdk/provisionerdaemons.go:38:6
|
||||
export interface ProvisionerDaemon {
|
||||
readonly id: string
|
||||
readonly created_at: string
|
||||
@@ -210,7 +210,7 @@ export interface ProvisionerDaemon {
|
||||
readonly provisioners: ProvisionerType[]
|
||||
}
|
||||
|
||||
// From codersdk/provisionerdaemons.go:62:6
|
||||
// From codersdk/provisionerdaemons.go:67:6
|
||||
export interface ProvisionerJob {
|
||||
readonly id: string
|
||||
readonly created_at: string
|
||||
@@ -222,7 +222,7 @@ export interface ProvisionerJob {
|
||||
readonly storage_source: string
|
||||
}
|
||||
|
||||
// From codersdk/provisionerdaemons.go:73:6
|
||||
// From codersdk/provisionerdaemons.go:78:6
|
||||
export interface ProvisionerJobLog {
|
||||
readonly id: string
|
||||
readonly created_at: string
|
||||
@@ -485,10 +485,10 @@ export interface WorkspaceResource {
|
||||
// From codersdk/workspacebuilds.go:22:6
|
||||
export type BuildReason = "autostart" | "autostop" | "initiator"
|
||||
|
||||
// From codersdk/provisionerdaemons.go:23:6
|
||||
// From codersdk/provisionerdaemons.go:28:6
|
||||
export type LogLevel = "debug" | "error" | "info" | "trace" | "warn"
|
||||
|
||||
// From codersdk/provisionerdaemons.go:16:6
|
||||
// From codersdk/provisionerdaemons.go:21:6
|
||||
export type LogSource = "provisioner" | "provisioner_daemon"
|
||||
|
||||
// From codersdk/parameters.go:29:6
|
||||
@@ -503,7 +503,7 @@ export type ParameterSourceScheme = "data" | "none"
|
||||
// From codersdk/parameters.go:37:6
|
||||
export type ParameterTypeSystem = "hcl" | "none"
|
||||
|
||||
// From codersdk/provisionerdaemons.go:42:6
|
||||
// From codersdk/provisionerdaemons.go:47:6
|
||||
export type ProvisionerJobStatus = "canceled" | "canceling" | "failed" | "pending" | "running" | "succeeded"
|
||||
|
||||
// From codersdk/organizations.go:14:6
|
||||
|
||||
Reference in New Issue
Block a user