in internal/metrics/service.go [33:73]
func NewService(resource *MonitoredResource, views []*view.View) (*Service, error) {
err := view.Register(views...)
if err != nil {
return nil, err
}
if !metadata.OnGCE() {
view.SetReportingPeriod(5 * time.Second)
pe, err := prometheus.NewExporter(prometheus.Options{})
if err != nil {
return nil, fmt.Errorf("prometheus.NewExporter: %w", err)
}
view.RegisterExporter(pe)
return &Service{pExporter: pe}, nil
}
projID, err := metadata.ProjectID()
if err != nil {
return nil, err
}
if resource == nil {
return nil, errors.New("resource is required, got nil")
}
sde, err := stackdriver.NewExporter(stackdriver.Options{
ProjectID: projID,
MonitoredResource: resource,
ReportingInterval: time.Minute, // Minimum interval for Stackdriver is 1 minute.
})
if err != nil {
return nil, err
}
// Minimum interval for Stackdriver is 1 minute.
view.SetReportingPeriod(time.Minute)
// Start the metrics exporter.
if err := sde.StartMetricsExporter(); err != nil {
return nil, err
}
return &Service{sdExporter: sde}, nil
}