You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.4 KiB

package flydetector
import (
"context"
"os"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/sdk/resource"
semconv "go.opentelemetry.io/otel/semconv/v1.24.0"
)
var _ resource.Detector = &FlyDetector{}
type FlyDetector struct{}
func NewDetector() resource.Detector {
return &FlyDetector{}
}
func (d *FlyDetector) Detect(_ context.Context) (*resource.Resource, error) {
a := []attribute.KeyValue{semconv.CloudProviderKey.String("fly")}
if an, ok := os.LookupEnv("FLY_APP_NAME"); ok {
a = append(a, attribute.String("fly.app_name", an))
} else {
return resource.Empty(), nil
}
if mid, ok := os.LookupEnv("FLY_MACHINE_ID"); ok {
a = append(a, attribute.String("fly.machine_id", mid))
}
if aid, ok := os.LookupEnv("FLY_ALLOC_ID"); ok {
a = append(a, attribute.String("fly.alloc_id", aid))
}
if pg, ok := os.LookupEnv("FLY_PROCESS_GROUP"); ok {
a = append(a, attribute.String("fly.process_group", pg))
}
if mv, ok := os.LookupEnv("FLY_MACHINE_VERSION"); ok {
a = append(a, attribute.String("fly.machine_version", mv), semconv.CloudResourceID(mv))
}
if reg, ok := os.LookupEnv("FLY_REGION"); ok {
a = append(a, attribute.String("fly.region", reg), semconv.CloudRegionKey.String(reg))
}
if ir, ok := os.LookupEnv("FLY_IMAGE_REF"); ok {
a = append(a, attribute.String("fly.image_ref", ir))
}
return resource.NewWithAttributes(semconv.SchemaURL, a...), nil
}