pkg/exporter/render.go (56 lines of code) (raw):

/* * Licensed to Apache Software Foundation (ASF) under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Apache Software Foundation (ASF) licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package exporter import ( "bytes" "context" "encoding/json" "text/template" "github.com/sirupsen/logrus" k8score "k8s.io/api/core/v1" sw "skywalking.apache.org/repo/goapi/collect/event/v3" "github.com/apache/skywalking-kubernetes-event-exporter/internal/pkg/logger" "github.com/apache/skywalking-kubernetes-event-exporter/pkg/k8s" ) func (tmplt *EventTemplate) render(ctx context.Context, swEvent *sw.Event, kEvent *k8score.Event) chan bool { done := make(chan bool) go func() { var templateCtx k8s.TemplateContext select { case templateCtx = <-k8s.Registry.GetContext(ctx, kEvent): case <-ctx.Done(): done <- true return } if logger.Log.IsLevelEnabled(logrus.DebugLevel) { if bs, err := json.Marshal(templateCtx); err == nil { logger.Log.Debugf("template context %+v", string(bs)) } } render := func(t *template.Template, destination *string) error { if t == nil { return nil } var buf bytes.Buffer if err := t.Execute(&buf, templateCtx); err != nil { return err } if buf.Len() > 0 { *destination = buf.String() } return nil } if err := render(tmplt.messageTemplate, &swEvent.Message); err != nil { logger.Log.Debugf("failed to render the template, using the default event content. %+v", err) } if err := render(tmplt.sourceTemplate.serviceTemplate, &swEvent.Source.Service); err != nil { logger.Log.Debugf("failed to render service template, using the default event content. %+v", err) } if err := render(tmplt.sourceTemplate.serviceInstanceTemplate, &swEvent.Source.ServiceInstance); err != nil { logger.Log.Debugf("failed to render service instance template, using the default event content. %+v", err) } if err := render(tmplt.sourceTemplate.endpointTemplate, &swEvent.Source.Endpoint); err != nil { logger.Log.Debugf("failed to render endpoin template, using the default event content. %+v", err) } done <- true }() return done }