github.com/vseinstrumentiru/lego@v1.0.2/internal/lego/monitor/provider.go (about)

     1  package monitor
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"contrib.go.opencensus.io/exporter/jaeger"
     7  	"contrib.go.opencensus.io/exporter/ocagent"
     8  	"contrib.go.opencensus.io/exporter/prometheus"
     9  	"emperror.dev/emperror"
    10  	health "github.com/AppsFlyer/go-sundheit"
    11  	"github.com/newrelic/newrelic-opencensus-exporter-go/nrcensus"
    12  
    13  	lego2 "github.com/vseinstrumentiru/lego/internal/lego"
    14  	lepropagation "github.com/vseinstrumentiru/lego/internal/lego/monitor/propagation"
    15  	"go.opencensus.io/plugin/ochttp/propagation/tracecontext"
    16  	"go.opencensus.io/stats/view"
    17  	"go.opencensus.io/trace"
    18  
    19  	// jaegerPropagation "contrib.go.opencensus.io/exporter/jaeger/propagation"
    20  	jaegerPropagation "github.com/vseinstrumentiru/lego/internal/lego/monitor/propagation/jaegerwrap"
    21  	"github.com/vseinstrumentiru/lego/internal/lego/monitor/telemetry"
    22  )
    23  
    24  func Provide(p lego2.Process, config Config) (*http.ServeMux, health.Health) {
    25  	router, healthz := telemetry.Provide(p, p.Build())
    26  
    27  	var formatter lepropagation.HTTPFormatCollection
    28  
    29  	if config.Trace.Enabled {
    30  		trace.ApplyConfig(config.Trace.Config())
    31  	}
    32  
    33  	if config.Exporter.Opencensus.Enabled {
    34  		p.Info("opencensus exporter enabled")
    35  
    36  		exporter, err := ocagent.NewExporter(append(
    37  			config.Exporter.OpencensusOptions(),
    38  			ocagent.WithServiceName(p.Name()),
    39  		)...)
    40  		emperror.Panic(err)
    41  
    42  		formatter = append(formatter, &tracecontext.HTTPFormat{})
    43  		trace.RegisterExporter(exporter)
    44  		view.RegisterExporter(exporter)
    45  	}
    46  
    47  	if config.Exporter.NewRelic.Enabled {
    48  		p.Info("newrelic exporter enabled")
    49  
    50  		exporter, err := nrcensus.NewExporter(
    51  			p.Name(),
    52  			config.Exporter.NewRelic.Key,
    53  		)
    54  		emperror.Panic(err)
    55  
    56  		trace.RegisterExporter(exporter)
    57  		view.RegisterExporter(exporter)
    58  	}
    59  
    60  	if config.Exporter.Jaeger.Enabled {
    61  		p.Info("jaeger exporter enabled")
    62  
    63  		exporter, err := jaeger.NewExporter(jaeger.Options{
    64  			CollectorEndpoint: config.Exporter.Jaeger.Addr,
    65  			Process: jaeger.Process{
    66  				ServiceName: p.Name(),
    67  			},
    68  			OnError: p.Handle,
    69  		})
    70  
    71  		emperror.Panic(err)
    72  
    73  		formatter = append(formatter, &jaegerPropagation.HTTPFormat{})
    74  		trace.RegisterExporter(exporter)
    75  	}
    76  
    77  	if config.Exporter.Prometheus.Enabled {
    78  		p.Info("prometheus exporter enabled")
    79  
    80  		exporter, err := prometheus.NewExporter(prometheus.Options{
    81  			OnError: emperror.WithDetails(
    82  				p.Handler(),
    83  				"component", "opencensus",
    84  				"exporter", "prometheus",
    85  			).Handle,
    86  			ConstLabels: map[string]string{
    87  				"app": p.Name(),
    88  			},
    89  		})
    90  		emperror.Panic(err)
    91  
    92  		view.RegisterExporter(exporter)
    93  		router.Handle("/metrics", exporter)
    94  	}
    95  
    96  	lepropagation.DefaultHTTPFormat = formatter
    97  
    98  	return router, healthz
    99  }