func()

in logger.go [148:187]


func (l *daisyLog) WriteSerialPortLogsToCloudLogging(w *Workflow, instance string) {
	if l.cloudLogger == nil {
		return
	}

	if _, hasBuffer := l.serialLogs[instance]; !hasBuffer {
		return
	}
	logs := l.serialLogs[instance].Bytes()

	writeLog := func(data []byte) {
		entry := &LogEntry{
			LocalTimestamp: time.Now(),
			WorkflowName:   getAbsoluteName(w),
			Message:        fmt.Sprintf("Serial port output for instance %q", instance),
			SerialPort1:    string(data),
			Type:           "Daisy",
		}
		l.cloudLogger.Log(logging.Entry{Timestamp: entry.LocalTimestamp, Payload: entry})
	}

	// Write the output to cloud logging only after instance has stopped.
	// Type assertion check is needed for tests not to panic.
	// Split if output is too long for log entry (100K max, we leave a 2K buffer).
	if len(logs) <= 98*1024 {
		writeLog(logs)
		return
	}
	bs := bytes.SplitAfter(logs, []byte("\n"))
	var data []byte
	for _, b := range bs {
		if len(data)+len(b) > 98*1024 {
			writeLog(data)
			data = b
		} else {
			data = append(data, b...)
		}
	}
	writeLog(data)
}