mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-02-07 17:10:07 +08:00
feat(log): Handle Errors in Event Stream (#7708)
This commit is contained in:
parent
e2354b8528
commit
c4f9d29bcb
@ -811,10 +811,8 @@ func (u *ContainerService) StreamLogs(ctx *gin.Context, params dto.StreamLog) {
|
|||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
case err := <-errorChan:
|
case err := <-errorChan:
|
||||||
_, err = fmt.Fprintf(w, "data: {\"event\": \"error\", \"data\": \"%s\"}\n\n", err.Error())
|
errorMsg := fmt.Sprintf("event: error\ndata: %v\n\n", err.Error())
|
||||||
if err != nil {
|
_, err = fmt.Fprintf(w, errorMsg)
|
||||||
return false
|
|
||||||
}
|
|
||||||
return false
|
return false
|
||||||
case <-ctx.Request.Context().Done():
|
case <-ctx.Request.Context().Done():
|
||||||
return false
|
return false
|
||||||
@ -843,14 +841,19 @@ func collectLogs(params dto.StreamLog, messageChan chan<- string, errorChan chan
|
|||||||
if params.Container != "" {
|
if params.Container != "" {
|
||||||
cmdArgs = append(cmdArgs, params.Container)
|
cmdArgs = append(cmdArgs, params.Container)
|
||||||
}
|
}
|
||||||
cmd := exec.Command("docker", cmdArgs...)
|
dockerCmd := exec.Command("docker", cmdArgs...)
|
||||||
|
|
||||||
stdout, err := cmd.StdoutPipe()
|
stdout, err := dockerCmd.StdoutPipe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errorChan <- fmt.Errorf("failed to get stdout pipe: %v", err)
|
errorChan <- fmt.Errorf("failed to get stdout pipe: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := cmd.Start(); err != nil {
|
stderr, err := dockerCmd.StderrPipe()
|
||||||
|
if err != nil {
|
||||||
|
errorChan <- fmt.Errorf("failed to get stderr pipe: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = dockerCmd.Start(); err != nil {
|
||||||
errorChan <- fmt.Errorf("failed to start command: %v", err)
|
errorChan <- fmt.Errorf("failed to start command: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -869,11 +872,20 @@ func collectLogs(params dto.StreamLog, messageChan chan<- string, errorChan chan
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := scanner.Err(); err != nil {
|
if err = scanner.Err(); err != nil {
|
||||||
errorChan <- fmt.Errorf("scanner error: %v", err)
|
errorChan <- fmt.Errorf("scanner error: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
cmd.Wait()
|
|
||||||
|
errScanner := bufio.NewScanner(stderr)
|
||||||
|
for errScanner.Scan() {
|
||||||
|
line := errScanner.Text()
|
||||||
|
errorChan <- fmt.Errorf("%v", line)
|
||||||
|
}
|
||||||
|
if err = dockerCmd.Wait(); err != nil {
|
||||||
|
errorChan <- fmt.Errorf("%v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *ContainerService) DownloadContainerLogs(containerType, container, since, tail string, c *gin.Context) error {
|
func (u *ContainerService) DownloadContainerLogs(containerType, container, since, tail string, c *gin.Context) error {
|
||||||
|
@ -139,6 +139,10 @@ const searchLogs = async () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
eventSource.onerror = (event: MessageEvent) => {
|
||||||
|
stopListening();
|
||||||
|
MsgError(event.data);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const onDownload = async () => {
|
const onDownload = async () => {
|
||||||
|
@ -30,13 +30,12 @@ const nginxRules: TokenRule[] = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'path',
|
type: 'path',
|
||||||
pattern:
|
pattern: /(?<=[\s"])\/[^"\s]+(?:\.\w+)?(?:\?\w+=\w+)?/g,
|
||||||
/(?:(?<=GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)\s+|(?<=open\(\s*")|(?<="\s*))(\/[^"\s]+(?:\.\w+)?(?:\?\w+=\w+)?)/g,
|
|
||||||
color: '#B87A2B',
|
color: '#B87A2B',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'http-method',
|
type: 'http-method',
|
||||||
pattern: /(?<=")(?:GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)(?=\s)/g,
|
pattern: /(?<=)(?:GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)(?=\s)/g,
|
||||||
color: '#27AE60',
|
color: '#27AE60',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user