代码拉取完成,页面将自动刷新
package utils
import (
"io"
"sync"
"github.com/rancher/kontainer-engine/logstream"
"github.com/rancher/norman/condition"
"github.com/rancher/types/apis/management.cattle.io/v3"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func NewClusterLoggingLogger(obj *v3.ClusterLogging, cl v3.ClusterLoggingInterface, cond condition.Cond) (logstream.LoggerStream, io.Closer) {
logger := logstream.NewLogStream()
wg := sync.WaitGroup{}
wg.Add(1)
go func() {
defer wg.Done()
for event := range logger.Stream() {
if cond.GetMessage(obj) != event.Message {
if event.Error {
cond.False(obj)
}
cond.Message(obj, event.Message)
if newObj, err := cl.Update(obj); err == nil {
obj = newObj
} else {
newObj, err = cl.Get(obj.Name, metav1.GetOptions{})
if err == nil {
obj = newObj
}
}
}
}
}()
return logger, closerFunc(func() error {
logger.Close()
wg.Wait()
return nil
})
}
func NewProjectLoggingLogger(obj *v3.ProjectLogging, pl v3.ProjectLoggingInterface, cond condition.Cond) (logstream.LoggerStream, io.Closer) {
logger := logstream.NewLogStream()
wg := sync.WaitGroup{}
wg.Add(1)
go func() {
defer wg.Done()
for event := range logger.Stream() {
if cond.GetMessage(obj) != event.Message {
if event.Error {
cond.False(obj)
}
cond.Message(obj, event.Message)
if newObj, err := pl.Update(obj); err == nil {
obj = newObj
} else {
newObj, err = pl.Controller().Lister().Get(obj.Namespace, obj.Name)
if err == nil {
obj = newObj
}
}
}
}
}()
return logger, closerFunc(func() error {
logger.Close()
wg.Wait()
return nil
})
}
type closerFunc func() error
func (f closerFunc) Close() error { return f() }
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。